SQL Sorgusu ile Genel toplamları belli bir sayıdan az olan verileri ayrıntılı listelemek.

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,155
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Merhaba Arkadaşlar,
SQL sorgusu ile ilgili yapmaya çalıştığım sorgu ayrıntısını, ekte gönderdiğim dosyada örnek veri ile destekleyerek belirttim.
Dosyayı açmadan konu hakkında bilgilenmek isteyen varsa, özetlemeye çalışayım:
detay isimli sayfada, firma ürün, eski, yeni, toplam başlıklar mevcut.
her firmaya ait birkaç ürün türü, bunların da eski ve yeni adet sayıları en sonda da toplam adetleri yer almaktadır.
tüm ürünlerinin toplamı 170 ten az olan firmaların, ürün bilgilerinin ayrıntılarını almak için nasıl bir sql sorgusu yazmak lazım, sorun budur.
Önceden teşekkürler.
NOT:
Kod:
sorgu = "select firma, sum(eski), sum(yeni), sum(toplam) from [detay$] group by firma"
sorgusu ile genel toplamları alıyorum ve hangi firmaların genel toplamının 170 ten az olduğunu görebiliyorum ama istediğim bu değil.
 

Ekli dosyalar

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
H2:K9 aralığında işaretlediğiniz "sarı" dolgulu hücreleri listelemek için kullanacağınız sorgu;

Kod:
sorgu = "select firma, sum(eski), sum(yeni), sum(toplam) from [detay$] group by firma having sum(toplam) < 170"
.
 
Son düzenleme:

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
H18:L29 aralığındaki sonuçları almak için kullanacağınız sorgu ise;

Kod:
sorgu = "select firma, ürün, eski, yeni, toplam from [detay$] where firma " & _
        "in (select firma from [detay$] group by firma having sum(toplam) < 170)"
.
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,155
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın Haluk ilgilendiğiniz için çok teşekkür ederim kodlarınızı denedim Fakat 3 satırlık özet veriyor Ben ise her firmanın ürün detaylarınıda içeren ayrıntılı verilerin sıralanmasını istiyorum sarı dolgulu alanın içine yerleştirdiğim Listenin aynısını bir başka deyişle H17:L29 hücre aralığındaki aralığındaki tabloyu kastediyorum
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
3 No'lu mesaja baktınız mı?

.
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,155
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın Haluk 2 cevabınız Tam istediğim cevaptı Çok teşekkür ederim..
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,225
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Kesişimleri de deneyebilirsiniz, performansları farklıdır...

Not: Yazım hataları olabilir...

1)
SQL:
select a.firma, a.ürün, a.eski, a.yeni, a.toplam
from [detay$] as a
inner join
(
    select b.firma
    from [detay$] as b
    group by b.firma having sum(b.toplam) < 170
) as drv
on drv.firma = a.firma
2)
SQL:
select a.firma, a.ürün, a.eski, a.yeni, a.toplam
from [detay$] as a
where exists
(
    select b.firma
    from [detay$] as b
    where b.firma = a.firma
    group by b.firma having sum(b.toplam) < 170
)
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,155
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın Gürsoy,
Her iki alternatifiniz de sorunsuz çalışıyor. Çok teşekkür ederim.
Sizin ve Sayın Haluk'un çözümlerinden vardığım sonuç: Hesaplamalarla ilgili şartları, where yerine having ile ifade etmek lazım. Umarım doğru anlamışımdır.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,269
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Zeki Bey daha doğru ifade eder ama ben şöyle söyleyeyim....

"Group By" komutu ile gruplandırılmış bir sonuç kümesinden belli bir kısmını filtrelemek için "Having" ile bir şart tanımlıyoruz....

Yani; aşağıdaki sorguyla 8 adet sonuç geliyorsa...

Kod:
sorgu = "select firma, sum(eski), sum(yeni), sum(toplam) from [detay$] group by firma"

Bu veri kümesinden sum(toplam)<170 şartını sağlayanları bulmak için bu kez sorguya "Having" ile bu "şartı" ilave ediyoruz;

Kod:
sorgu = "select firma, sum(eski), sum(yeni), sum(toplam) from [detay$] group by firma having sum(toplam) < 170"

.
 
Son düzenleme:

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,155
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın Haluk,
Çok güzel bir açıklama oldu. Kafamda "Having" öğesi daha iyi şekillendi. Çok teşekkür ederim.
 
Üst