• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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,166
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

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:
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)"

.
 
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
 
3 No'lu mesaja baktınız mı?

.
 
Sayın Haluk 2 cevabınız Tam istediğim cevaptı Çok teşekkür ederim..
 
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
)
 
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.
 
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:
Sayın Haluk,
Çok güzel bir açıklama oldu. Kafamda "Having" öğesi daha iyi şekillendi. Çok teşekkür ederim.
 
Geri
Üst