Alan koşuluna göre toplam aldırma

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
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Alan koşuluna göre toplam aldırma

Mesaj gönderen conari »

Kod: Tümünü seç

 select stok ,(giris-cikis) as bakiye from tablostok where depo=11 

Kod: Tümünü seç

 select stok (sip_giris-sip_cikis) as sip_bakiye from tablostok where depo=11 or  depo=20
ekteki sorgular gibi bir sorgum var ve birleştirerek almak istiyorum
ama sum ile Group by kullandım yine de depo koduna göre ayrı ayrı döküyor. :oops: :cry: :roll: :?:
yani

Kod: Tümünü seç

 select stok, (select(sum(giris-cikis) as bakiye where depo=11 ), 
(select(sum(sip_giris-sip_cikis) as sip_bakiye where depo=11 and depo=20) from tablostok group by stok,giris,cikis,sip_giris,sip_cikis,depo
Nerdedir hatam ?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
yazicih
Üye
Mesajlar: 92
Kayıt: 11 Şub 2005 02:10
Konum: Antalya

Mesaj gönderen yazicih »

GROUP BY KISMINA DEPO ALANINI KULLANMIŞSIN
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Gruplandığı için normal bir durum. UNION desteği var mı emin olmamakla birlikte şöyle olabilir;

Kod: Tümünü seç

select stok, (giris-cikis) as bakiye from tablostok
where depo=11
union
select stok (sip_giris-sip_cikis) as sip_bakiye from tablostok 
where depo=11 or depo=20
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Yok hoca Union denedim yemiyo
sadece stok kodu ve bakiye geliyor ama oda mükerer stok kodu ile
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

DERIVED TABLES querysi yazarak deneseniz.Yani:

Kod: Tümünü seç

SELECT 
  T1.Stok,
  SUM(T1.bakiye) AS bakiye,
  SUM(T1.sip_bakiye) AS sip_bakiye
FROM (
      select stok, (select(sum(giris-cikis) as bakiye where depo=11 ), 
      (select(sum(sip_giris-sip_cikis) as sip_bakiye where depo=11 and depo=20) from tablostok group by stok,giris,cikis,sip_giris,sip_cikis,depo) T1
GROUP BY T1.Stok
İyi çalışmalar.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

2. AS 'lara şarlıjo
syntax hatası veriyor.

ilgilendiğin için teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Zaten verdiğin query yanlış gibi de ben direk almıştım fazla incelemeden.

Kendi düzgün çalışan queryni benim yazdığımın içine yerleştirip denersen çalışması lazım ki genel yapı zaten o şekilde:

Kod: Tümünü seç

SELECT 
  T1.Stok, 
  SUM(T1.bakiye) AS bakiye, 
  SUM(T1.sip_bakiye) AS sip_bakiye 
FROM ( 
     ...............
     ) T1 
GROUP BY T1.Stok
İyi çalışmalar.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Çözüme şu şekilde ulaştım Case ve when mantığı ile

Kod: Tümünü seç

SELECT STOK,
SUM(CASE WHEN DEPO=11 THEN (GIRIS-CIKIS) ELSE 0 END),
SUM(CASE WHEN DEPO IN ('11','20') THEN (SIP_GIRIS-SIP_CIKIS) ELSE 0 END)
FROM TABLOSTOK 
GROUP BY STOK ORDER BY STOK 
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Yukarıda da aynı yazılmış fakat ikinci CASE deki 11 gereksiz. Önceki CASE de yakaladığından ikinciye tekrar düşmez :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Hoca Selam,

Toplanan Alanlar farklı, bunun için yinede ikinci select de ve case komutunda depo =11 kullanmana gerek yok mu demek istedin?

tam anlayamadım.
:roll:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ayrı ayrı CASE/WHEN kullandığın için söylediğim doğru değil. Tek CASE bloğunda dediğim mantık geçerli. Yine de 11 leri ayrı 20 leri ayrı toplatabilirsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla