Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SUM, DISTINC ve CASE kullanımı Hk!
#1
Select
    COUNT(DISTINCT ISLEM_ID) AS "HAREKET SAYISI",
    SUM(COALESCE(T_TUTAR, 0))  AS "TOPLAM BAKİYE",     
    SUM(CASE WHEN durum<>0  THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS "KALAN",
    SUM(CASE WHEN durum=0   THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS "ÖDENEN"
FROM KASA
Where TARIH between '2017-01-01' and '2017-01-15'

Merhaba,
Yukarıdaki sorgu cümlesinde CASE kullandığım alanlarda şarta DISTINCT kullanılabiliyor mu?
durum=0 veya durum<>0 kullandığım yere DISTICT(ISLEM_ID) gibi bir ifade kullanmak istiyorum.  Confused
Cevapla
#2
Sorgunuzda sadece group fonskyionları kullandığınız için group by yazmasanız da sorgu arka planda group by varmış gibi çalışır. Dolayısıyla grup işlemlerini de where koşuluna değil having'e yazabilirsiniz.

Soruyu sanırım yanlış anlamışım, distinct ifadesi tek başına kullanıldığında count(distinct) gibi değilde aşağıdaki gibi kullanılırsa col1 ve col2'ye birlikte etki ettiğinden dediğiniz gibi olmaz.

select distinct col1, col2 from xyz

Fakat count(distinct col1) diyecekseniz şu şekilde mümkün.

select case when count(distinct col1) = 1 then 'Y' else 'N' end col1_calc, col2 from xyz

Ayrıca tarih alanları da string olarak yazarsanız bu alanlar üzerindeki index kullanımlarını da engellersiniz.
Cevapla
#3
Hocam vakit ayırıp cevap verdiğiniz için teşekkürler.
Firmanın kullandığı muhasebe uygulamasından rapor alıyorum. Rapor süresini ve yapısını tekrardan yapılandırmaya çalışıyorum. Birden fazla Query kullanarak aldığım sonuçları tek satırda gösterebilmem için yukarıda ifade ettiğim gibi Case When kısmında Distinct kullanmaya çalışıyorum.
Tablonun yapısı aşağıdaki gibi. 
XXXX.png

count(distinct (case when DURUM=1 then ISLEM_ID end)) as "İŞLEM SAYISI"

buradaki yapıya benzer bir yapı ile ISLEM_ID si benzersiz olan kayıtların TOPLAM_TUTAR alanlarını hesaplamak mümkün mü?
Cevapla
#4
(13-01-2018, Saat: 18:09)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHocam vakit ayırıp cevap verdiğiniz için teşekkürler.
Firmanın kullandığı muhasebe uygulamasından rapor alıyorum. Rapor süresini ve yapısını tekrardan yapılandırmaya çalışıyorum. Birden fazla Query kullanarak aldığım sonuçları tek satırda gösterebilmem için yukarıda ifade ettiğim gibi Case When kısmında Distinct kullanmaya çalışıyorum.
Tablonun yapısı aşağıdaki gibi. 
XXXX.png

count(distinct (case when DURUM=1 then ISLEM_ID end)) as "İŞLEM SAYISI"

buradaki yapıya benzer bir yapı ile ISLEM_ID si benzersiz olan kayıtların TOPLAM_TUTAR alanlarını hesaplamak mümkün mü?
Merhaba,

Şu şekilde mi ?

SELECT ISLEM_ID, SUM(TUTAR) AS TUTAR FROM XYZ GROUP BY ISLEM_ID

(12-01-2018, Saat: 14:20)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Select
    COUNT(DISTINCT ISLEM_ID) AS "HAREKET SAYISI",
    SUM(COALESCE(T_TUTAR, 0))  AS "TOPLAM BAKİYE",     
    SUM(CASE WHEN durum<>0  THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS "KALAN",
    SUM(CASE WHEN durum=0   THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS "ÖDENEN"
FROM KASA
Where TARIH between '2017-01-01' and '2017-01-15'

Merhaba,
Yukarıdaki sorgu cümlesinde CASE kullandığım alanlarda şarta DISTINCT kullanılabiliyor mu?
durum=0 veya durum<>0 kullandığım yere DISTICT(ISLEM_ID) gibi bir ifade kullanmak istiyorum.  Confused

Bu sorunuza gelince;

Amacınız tam olarak nedir ?

Benzer bir ifadeyi "Group By" kullanımı sonrası "Having" ile sağlayabilirsiniz.

SELECT ISLEM_ID, SUM(TUTAR) AS TUTAR FROM XYZ
GROUP BY ISLEM_ID
HAVING SUM(TUTAR) > 500

ya da;
SELECT ISLEM_ID, SUM(TUTAR) AS TUTAR FROM XYZ
GROUP BY ISLEM_ID
HAVING COUNT(ISLEM_ID) > 0
Cevapla
#5
(13-01-2018, Saat: 21:47)mad85 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(13-01-2018, Saat: 18:09)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHocam vakit ayırıp cevap verdiğiniz için teşekkürler.
Firmanın kullandığı muhasebe uygulamasından rapor alıyorum. Rapor süresini ve yapısını tekrardan yapılandırmaya çalışıyorum. Birden fazla Query kullanarak aldığım sonuçları tek satırda gösterebilmem için yukarıda ifade ettiğim gibi Case When kısmında Distinct kullanmaya çalışıyorum.
Tablonun yapısı aşağıdaki gibi. 
XXXX.png

count(distinct (case when DURUM=1 then ISLEM_ID end)) as "İŞLEM SAYISI"

buradaki yapıya benzer bir yapı ile ISLEM_ID si benzersiz olan kayıtların TOPLAM_TUTAR alanlarını hesaplamak mümkün mü?
Merhaba,

Şu şekilde mi ?

SELECT ISLEM_ID, SUM(TUTAR) AS TUTAR FROM XYZ GROUP BY ISLEM_ID

(12-01-2018, Saat: 14:20)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Select
    COUNT(DISTINCT ISLEM_ID) AS "HAREKET SAYISI",
    SUM(COALESCE(T_TUTAR, 0))  AS "TOPLAM BAKİYE",     
    SUM(CASE WHEN durum<>0  THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS "KALAN",
    SUM(CASE WHEN durum=0   THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS "ÖDENEN"
FROM KASA
Where TARIH between '2017-01-01' and '2017-01-15'

Merhaba,
Yukarıdaki sorgu cümlesinde CASE kullandığım alanlarda şarta DISTINCT kullanılabiliyor mu?
durum=0 veya durum<>0 kullandığım yere DISTICT(ISLEM_ID) gibi bir ifade kullanmak istiyorum.  Confused

Bu sorunuza gelince;

Amacınız tam olarak nedir ?

Benzer bir ifadeyi "Group By" kullanımı sonrası "Having" ile sağlayabilirsiniz.

SELECT ISLEM_ID, SUM(TUTAR) AS TUTAR FROM XYZ
GROUP BY ISLEM_ID
HAVING SUM(TUTAR) > 500

ya da;
SELECT ISLEM_ID, SUM(TUTAR) AS TUTAR FROM XYZ
GROUP BY ISLEM_ID
HAVING COUNT(ISLEM_ID) > 0

Arkadaşında bahsettiği gibi having işinizi görecektir
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#6
(13-01-2018, Saat: 18:09)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHocam vakit ayırıp cevap verdiğiniz için teşekkürler.
Firmanın kullandığı muhasebe uygulamasından rapor alıyorum. Rapor süresini ve yapısını tekrardan yapılandırmaya çalışıyorum. Birden fazla Query kullanarak aldığım sonuçları tek satırda gösterebilmem için yukarıda ifade ettiğim gibi Case When kısmında Distinct kullanmaya çalışıyorum.
Tablonun yapısı aşağıdaki gibi. 
XXXX.png

count(distinct (case when DURUM=1 then ISLEM_ID end)) as "İŞLEM SAYISI"

buradaki yapıya benzer bir yapı ile ISLEM_ID si benzersiz olan kayıtların TOPLAM_TUTAR alanlarını hesaplamak mümkün mü?

Eğer tekrarlayan satırlarınız yoksa tabii ki mümkün. count distinct yerine sum kullanacaksınız. 

sum distinct gibi bir ifade de mümkün ama aynı fiyata sahip farklı ürünler olabileceğinden dolayı bu çok yanlış sonuçlar üretebilir.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQL üzerinde Pivot içindeki in Kullanımı hakkında adelphiforumz 10 450 19-03-2018, Saat: 21:38
Son Yorum: FiRewaLL



Konuyu Okuyanlar: 1 Ziyaretçi