SQL iç içe sorgu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 09:30
Konum: Antalya

SQL iç içe sorgu

Mesaj gönderen Senat0r »

Merhaba sevgili arkadaşlar
elektrik ve günlük kişi sayısı adında 2 tablom mevcut
ve

Kod: Tümünü seç

select 
(select k.pax from tblpax k where k.tarih="2014-12-01 00:00:00" ) as kisiSayisi,
(t.toplamtutar/(select k.pax from tblpax k where k.tarih="2014-12-01 00:00:00" )) as Paxhesap,
(t.tuketim/(select k.pax from tblpax k where k.tarih="2014-12-01 00:00:00" )) as PaxTuketim,
t.* from tblelektrik t 
where t.birimadi="ELEKTRİK RESORT" and t.tarih="2014-12-01 00:00:00"
Şeklinde sorgu yaptığım zaman sorun olmadan sonucu tek satır olarak görebiliyorum

ama

Kod: Tümünü seç

select (select k.pax from tblpax k where k.tarih between "2014-12-01 00:00:00" and "2014-12-02 00:00:00" ) as kisiSayisi,
(t.toplamtutar/(select k.pax from tblpax k where k.tarih between "2014-12-01 00:00:00" and "2014-12-02 00:00:00" )) as Paxhesap,
(t.tuketim/(select k.pax from tblpax k where k.tarih between "2014-12-01 00:00:00" and "2014-12-02 00:00:00")) as PaxTuketim,
t.* from tblelektrik t 
where t.birimadi="ELEKTRİK RESORT" and tarih between "2014-12-01 00:00:00" and "2014-12-02 00:00:00"
Bu şekilde yaptığım zaman
alt sorgu sadece tek değer döndürür şeklinde uyarı alıyorum ilk sıradaki sorguyu satır satır nasıl hesaplata bilirim Yardımlarınız için şimdiden teşekkür ederim.
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL iç içe sorgu

Mesaj gönderen sabanakman »

Muhtemelen tek satırlık kayda karşılık between ile gelen sorgu sonucu çok satır içerdiği için ilgili hata gelmektedir. Hata aldığınız ikinci sorgudan elde etmek istenilen sonuç 2 günlük tek toplam mıdır yoksa her farklı güne ait ayrı ayrı satırlarda gösterilecek toplamlar mıdır? Ben tek satır olarak ele alarak aşağıdaki sorguyu önerebilirim.

Kod: Tümünü seç

select
  k.pax as kisiSayisi,
  t.toplamtutar/k.pax as Paxhesap,
  t.tuketim/k.pax as PaxTuketim
from
  (select sum(toplamtutar) as toplamtutar, sum(tuketim) as tuketim from tblelektrik 
   where birimadi="ELEKTRİK RESORT" and tarih between "2014-12-01 00:00:00" and "2014-12-02 00:00:00") as t 
inner join
  (select sum(pax) as pax from tblpax where tarih between "2014-12-01 00:00:00" and "2014-12-02 00:00:00") as k
on 1=1
where k.pax<>0
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 09:30
Konum: Antalya

Re: SQL iç içe sorgu

Mesaj gönderen Senat0r »

Hocam vermiş olduğunuz bilgi için teşekkür ediyorum sizin göstermiş olduğunuz ışık doğrultusunda

Kod: Tümünü seç

select p.tarih, p.pax,
e.tuketim,e.toplamtutar,
(e.tuketim/p.pax) as kisibasituketim,
(e.toplamtutar/pax) as kisibasimaliyet
from tblpax P 
left join tblelektrik e
on
p.tarih=e.tarih
WHERE p.tarih BETWEEN "2014-12-01 00:00:00" AND "2014-12-017 00:00:00"
Sorunu çözdüm bana gün gün kişi başı maliyet ve tüketim gerekliydi
Bazen en basit problemlerin çözümlerini göremiyoruz :)
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL iç içe sorgu

Mesaj gönderen sabanakman »

Tarih alanında her güne ait tek satır kaydınız varsa sorun yok ama aynı güne birden fazla kayıt gelecekse sıkıntı çıkabilir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 09:30
Konum: Antalya

Re: SQL iç içe sorgu

Mesaj gönderen Senat0r »

evet hocam dediğiniz gibi bir tarihde iki kayıt varsa sorun çıkartıyor her tarih için dahil ettiğim tabloyu nasıl toplatabilirim
sum alan dediğim zaman tarihler arasını toplatıyor Buda yanlış sonuç döndürmesine neden oluyor
http://i.hizliresim.com/rmQvL1.png
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL iç içe sorgu

Mesaj gönderen sabanakman »

Her iki tablonun tarihlere göre ayrı ayrı toplamlarını alarak bunları daha sonra birleştirmekte fayda var. tblelektrik tablosumda "birimadi"na göre de ayrı toplam alındı ama gerekli değilse group by ve select listesinden çıkarılabilir.

Kod: Tümünü seç

select
  e.birimadi, p.tarih, p.pax as kisiSayisi,
  e.tuketim, e.toplamtutar,
  case when p.pax<>0 then e.tuketim/p.pax end as kisibasituketim,
  case when p.pax<>0 then e.toplamtutar/p.pax end as kisibasimaliyet
from
  (select tarih, sum(pax) as pax from tblpax group by tarih) as p
left join
  (select tarih, birimadi, sum(toplamtutar) as toplamtutar, sum(tuketim) as tuketim from tblelektrik
   group by tarih, birimadi) as e
on e.tarih=p.tarih
where p.tarih between '2014-12-01' and '2014-12-02' and e.birimadi='ELEKTRİK RESORT'
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 09:30
Konum: Antalya

Re: SQL iç içe sorgu

Mesaj gönderen Senat0r »

Cevabınız için teşekkür ediyorum hocam
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"
Cevapla