JOIN SORUNU

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
terazi125
Üye
Mesajlar: 15
Kayıt: 04 Ara 2010 11:48

JOIN SORUNU

Mesaj gönderen terazi125 »

Arkadaslar join li tablolarda toplama sorunum var soyleki;

tablo1 tarıh a1,a2,a3 //a1 unique
tablo2 a1,b1,b2 //a1 unique değil!

sorgu:
select tarıh,sum(a2),sum(a3),
sum(b1),sum(b2)
from tablo1
ınner joın tablo2 on tablo1.a1=tblo2.a1
group by tarıh

Kod: Tümünü seç

tarıh        a1    a2    a3     t2.a1     b1       b2
2010-01-01   1     10     6      1        50      100
2010-01-01   1     10     6      1        65      105
2010-01-01   1     10     6      1        45       70
2010-01-01   2     25    15      2        20       10
2010-01-01   2     25    15      2        35       75
----------------------------------------------------------
                   80     48               215     360  olusan sonuc bu ve yanlıs
                   35     21               215     360  olması gereken bu arkadaslar

Bildiğiniz gibi sebebide joınden dolayı satır uretımınin artması.
Bana a1 ve a2 leri normal toplamı gelmeli. Nasıl halledebilirim.
(subquery -alt sorgu- kullanmak ıstemıyorum cunku view tanımlıcam. view uzerınde ındexleme yapılmıyor.)
Yardım edebılecek arkadaslara cok tesekkur ederım
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: JOIN SORUNU

Mesaj gönderen orhancc »

Örnek veri gönderme şansın varmı. Alt toplamlar istediğin gibi olacaksa muhtemelen yanlış join çekiyorsun.
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: JOIN SORUNU

Mesaj gönderen sabanakman »

tablo1 kayıtları birden fazla kayda bağlandığı için toplamlar yanlış olacaktır. Öncelikle tablo2 kayıtlarının gruplu toplamını elde edip (a1 satırı tek kalacak şekilde toplam elde edilmesi) , bu listeye join yaparak sorunu aşabilirsiniz.

Kod: Tümünü seç

select tarıh, sum(ana.a2), sum(ana.a3),sum(alt.b1),sum(alt.b2) from tablo1 as ana
inner join (select a1, sum(b1) as b1, sum(b2) as b2 from tablo2 group by a1) as alt
on alt.a1=ana.a1
group by ana.tarıh
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
terazi125
Üye
Mesajlar: 15
Kayıt: 04 Ara 2010 11:48

Re: JOIN SORUNU

Mesaj gönderen terazi125 »

orhancc yazdı:Örnek veri gönderme şansın varmı. Alt toplamlar istediğin gibi olacaksa muhtemelen yanlış join çekiyorsun.
haklısın kardes joın cekılısınde sorun varmıs. sabanakman arkadas saolsun kodu calıstı
sabanakman yazdı:tablo1 kayıtları birden fazla kayda bağlandığı için toplamlar yanlış olacaktır. Öncelikle tablo2 kayıtlarının gruplu toplamını elde edip (a1 satırı tek kalacak şekilde toplam elde edilmesi) , bu listeye join yaparak sorunu aşabilirsiniz.

Kod: Tümünü seç

select tarıh, sum(ana.a2), sum(ana.a3),sum(alt.b1),sum(alt.b2) from tablo1 as ana
inner join (select a1, sum(b1) as b1, sum(b2) as b2 from tablo2 group by a1) as alt
on alt.a1=ana.a1
group by ana.tarıh
sabanakman kardes tesekkur ederım cok saol
Cevapla