farklı bir sql sorgusu

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

farklı bir sql sorgusu

Mesaj gönderen esistem »

merhaba arkadaşlar benim değişik bir sorum olucaktı;
A tablom kod int, tutar decimal
B tablom kod int, tutar decimal
öyle bir sql sorgusu yazılacak ki aynı koda sahip A tablosundaki tutar alanı ile B tablosundaki tutar alanı toplanacak ve tek bir tabloda gösterilecek.
Şöyleki
A tablosundaki kayıtlarımız ;
1 , 500
2, 600
B tablosundaki kayıtlarımız ;
1, 400
2, 200
sorgu sonucumuz ; yani A birleşim B
1, 900
2, 800

yada; aynı koda sahip A tablosundaki tutar alanı ile B tablosundaki tutar alanının farkı alınacak ve tek bir tabloda gösterilecek.
Şöyleki
A tablosundaki kayıtlarımız ;
1 , 500
2, 600
B tablosundaki kayıtlarımız ;
1, 400
2, 200
sorgu sonucumuz ; yani A birleşim B
1, 100
2, 400
böyle bir sorgu mümkünmüdür?
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: farklı bir sql sorgusu

Mesaj gönderen Battosai »

Nerden çıkarttın sen bunun farklı bir sorgu olduğunu daha farklı sorgu görmemişin demek :twisted: Aşağıdaki kodu dene bakalım...
select A,B,A.tutar+B.tutar as Toplam from A,B
Yalnız bu kod tüm kayıtları birbiri ile toplar bir tablonda 10 diğerinde 20 kayıt varsa 200 tane satır döndürür...toplama işlemine konu olan alanları bir birine eşleyecek bir kriterin varsa satır satır eşlenik şekilde listeleyebileceğin bir kod daha yazılabilir örn:
select A,B,A.tutar+B.tutar as Toplam from A inner join B on B.id=A.id gibi
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: farklı bir sql sorgusu

Mesaj gönderen esistem »

Battosai yazdı:Nerden çıkarttın sen bunun farklı bir sorgu olduğunu daha farklı sorgu görmemişin demek :twisted: Aşağıdaki kodu dene bakalım...
pardon dostum haklısın ben yanlış sormuşum soruyu sanırım dalgınlığıma geldi sabahtan beri uğraşıyorum da.

A tablosu B Tablosu
1 , 500 1, 200
2, 600 2, 300
1, 100
1, 200
2, 100
A.sql: select kod,sum(tutar) as toplam from A group by kod;
A.sql sonucu
1, 800
2, 700 oluyor, ben bunu bu şekilde önce gruplayarak alıp sonra bu değerleri bir tabloya yazdırıp seninde gönderdiğin şekilde toplatabiliyorum fakat yapmak istediğim asıl şu ;
A.sql deki kodu şu şekilde yapabilirmiyiz ?
select A.kod,B.kod,sum(a.tutar)+B.tutar as Toplam from A group by A.kod inner join B on B.id=A.id gibi ????
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: farklı bir sql sorgusu

Mesaj gönderen esistem »

tekrar merhaba sorguyu deneyerek yaptım sonunda eğer ihtiyacınız olursa kod budur; yalnız paradox tablosunda denedim şimdi fb de deniycem.

SELECT A.KOD,SUM(A.DEGER)+B.DEGER AS TOPLAM
FROM A LEFT JOIN B ON A.KOD=B.KOD GROUP BY A.KOD
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: farklı bir sql sorgusu

Mesaj gönderen sabanakman »

Kod: Tümünü seç

select ATop.Kod, ATop.AToplam,  BTop.BToplam, (ATop.AToplam - BTop.BToplam) as AFarkB,  (BTop.BToplam - ATop.AToplam) as BFarkA,  (ATop.AToplam + BTop.BToplam) as Toplam from
(select Kod, isNull(sum(Tutar),0) as AToplam from A group by Kod) as ATop
cross join
(select Kod, isNull(sum(Tutar),0) as BToplam from B group by Kod) as BTop
where ATop.Kod=BTop.Kod
Denemeye değer bir sorgu. Tabi bu yapı SQL Server için geçerli ama FireBird'de de geçerli olabilir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: farklı bir sql sorgusu

Mesaj gönderen Hakan Can »

Şöyle bir SQL cümlesini de deneyebilirsiniz:

Kod: Tümünü seç

SELECT
  T1.KOD,
  COALESCE(T2.TUTAR, 0) AS TUTAR_A,
  COALESCE(T3.TUTAR, 0) AS TUTAR_B,
  COALESCE(T2.TUTAR, 0) + COALESCE(T3.TUTAR, 0) AS TOPLAM,
  COALESCE(T2.TUTAR, 0) - COALESCE(T3.TUTAR, 0) AS FARK
FROM
 (
  SELECT KOD FROM TABLO_A UNION
  SELECT KOD FROM TABLO_B
 ) T1
  LEFT JOIN TABLO_A T2 ON T2.KOD = T1.KOD
  LEFT JOIN TABLO_B T3 ON T3.KOD = T1.KOD
Cevapla