SELECT DONEM =
CASE MONTH(A.TARIH)
WHEN 1 THEN 'OCAK'
WHEN 2 THEN 'ŞUBAT'
WHEN 3 THEN 'MART'
WHEN 4 THEN 'NİSAN'
WHEN 5 THEN 'MAYIS'
WHEN 6 THEN 'HAZİRAN'
WHEN 7 THEN 'TEMMUZ'
WHEN 8 THEN 'AĞUSTOS'
WHEN 9 THEN 'EYLÜL'
WHEN 10 THEN 'EKİM'
WHEN 11 THEN 'KASIM'
WHEN 12 THEN 'ARALIK' END, SUM(B.MIKTAR)MIKTAR, SUM(B.MIKTAR*B.FIYAT) TUTAR,
ISKONTOTUTAR =
CASE (A.ISKTUR)
WHEN 1 THEN SUM((B.MIKTAR*B.FIYAT)*(A.DIBISK*100/A.ARATOP)/100)
WHEN 2 THEN SUM((B.MIKTAR*B.FIYAT)*(A.DIBISK)/100)
END
FROM FATURA A, FATURADET
WHERE A.TIP=TS AND A.TIP=B.TIP AND A.SIRKET=B.SIRKET AND A.FISNO=B.FISNO
GROUP BY MONTH(A.TARIH),A.ISKTUR
ORDER BY MONTH(A.TARIH)
GO
ben bu sorgu sonucunun ay bazında dönemesini istiyorum.
dönem Satış_miktarı Satış_tutarı Satış_iskonto
ocak 350 3500 110
şeklinde. fakat group by a.ıskyt gurupladığımda bu sorgu
ocak ... .... ....
ocak ... .... ....
şeklinde dönüyor case içindeki şartlardan dönen değerleri direk toplatma şansım yokmu guruplamadan çalışmıyor. (ısktur 1 ise tutar 2 ise yüzde bazında iskonto yapılmış demek)
CREATE TABLE #MyTable (Tip int, Ocak float,Subat float,....,Satis_Tutari float)
gibi, (burada siz her tip için bir satır tutmuş olacaksınız yani- burayı tam olarak neye göre tutmak istiyorsanız ona göre değiştirmelisiniz ben sizin sorgunuzu böyle anladığımdan böyle yazdım)
sonra bu tabloya ilk kaydınızı insert yapmanız lazım. Bu her tipi önce diğer alanları boş atayarak yapılacak ibr kayıt olabilir. Artık tip değerlerini nerden alıyorsanız.
Ondan sonra her ay için sorgunuzu hazırlayıp temp tablonuza gerekli şartları vererek ilgili aya update yapmanız lazım.
SELECT
CASE MONTH(A.TARIH)
WHEN 1 THEN 'OCAK'
WHEN 2 THEN 'ŞUBAT'
WHEN 3 THEN 'MART'
WHEN 4 THEN 'NİSAN'
WHEN 5 THEN 'MAYIS'
WHEN 6 THEN 'HAZİRAN'
WHEN 7 THEN 'TEMMUZ'
WHEN 8 THEN 'AĞUSTOS'
WHEN 9 THEN 'EYLÜL'
WHEN 10 THEN 'EKİM'
WHEN 11 THEN 'KASIM'
WHEN 12 THEN 'ARALIK' END,
SUM(B.MIKTAR)MIKTAR, SUM(B.MIKTAR*B.FIYAT) TUTAR,
SUM(CASE A.ISKTUR
WHEN 1 THEN (B.MIKTAR*B.FIYAT)*(A.DIBISK*100/A.ARATOP)/100
WHEN 2 THEN (B.MIKTAR*B.FIYAT)*(A.DIBISK)/100)
END
FROM FATURA A, FATURADET
WHERE A.TIP=TS AND A.TIP=B.TIP AND A.SIRKET=B.SIRKET AND A.FISNO=B.FISNO
GROUP BY 1
ORDER BY 1
SELECT
SUM(CASE A.ISKTUR
WHEN 1 THEN (B.MIKTAR*B.FIYAT)*(A.DIBISK*100/A.ARATOP)/100
WHEN 2 THEN (B.MIKTAR*B.FIYAT)*(A.DIBISK)/100)
END
FROM FATURA A, FATURADET
WHERE A.TIP=TS AND A.TIP=B.TIP AND A.SIRKET=B.SIRKET AND A.FISNO=B.FISNO
GROUP BY 1
ORDER BY 1
İyi çalışmalar.
Hakan kardeş söylediğin şekilde denedim yalnız senin sum(case satırında açmış olduğun parantezi nerde kapatacağımı bulamadım end den sorna kappatığımda hata veriyor end önce kapattım gene hata veriyor sum 'ı kaldırıp denedim ozamanda group by da takılıyor.
Naile hnm stored procedur lerle alkalı bilgim formdan procedürlerle alakalı okuduklarım (çoğunluğuna göz atmışımdır) bu işle alkalı procedürü yazacak kadar bilgim yok.
olayı kısaca özetliyeyim. fatura fatura başlık bilgilerinin tutulduğu faturadet detay yani stok tutulduğu tablo. ben bu iki tabloya dayalı rapor yapmak istiyorum. iki tabloyu kullanmamın nedeni faturada dib iskonto yapılmışsa bunu başlıkta tutuyor yapılan kalem yani satırbazındaki iskontalarıda faturadetay da tutuyor. hesaplatmada problemim yok ama bunları ay bazında toplam olarak göstermesi lazım group by month(tarıh) dedimmi buda çözülüyor ama gurubun içine iskontoturı sokamadan sorgu çalışmıyor. sokunca bilgiyi iki satır şeklinde getiriyor.
SELECT
URUN_KODU,
YIL,
SUM(CASE WHEN AY = 1 THEN TUTAR ELSE 0.0 END) AS OCAK,
SUM(CASE WHEN AY = 2 THEN TUTAR ELSE 0.0 END) AS SUBAT,
SUM(CASE WHEN AY = 3 THEN TUTAR ELSE 0.0 END) AS MART,
.
.
.
SUM(CASE WHEN AY = 12 THEN TUTAR ELSE 0.0 END) AS ARALIK,
SUM(TUTAR) AS TOPLAM
FROM URUN_TUTARLARI
GROUP BY URUN_KODU, YIL
ORDER BY URUN_KODU, YIL
Bu query'ye benzer mantıkla istediğin query'i yapabilirsin. Basit bir query yazıp dene istersen.