(24/07/2025, 03:36)atoykan yazdı: Talebiniz ilk sorunuza göre biraz daha karmaşık, ilk talep doğrultusunda 4 tablodaki sorgudan 3 tanesi aynı tablo içinden tek bir verinin toplamlarını listelemek kolay. Ancak 4. tablo gider tablosunda her bir gider türü için ayrı gruplama yapılacağından bu sorgu birleştirmeye dahil edilirse örneğin adblue için toplam diğer sütunlarda fatura hgs s toplamları sonra yemek gideri toplamı bir satırda yine yanında diğer sütunlarda fatura hgs vs toplamları tekrarlanan ve tam olarak yapmak istediğinizi elde edemeyeceğiniz bir sorgu oluşur. Özetle ifade edecek lursak bu tip bir sorgunun sonucunuhocam olayı çözdüm ben, haklısınız çok karışık. ama bahsedilen sorunu çözdüm. hatta buraya yükleyeyim ki diğer arkadaşlarla da paylaşalım. belki ihtiyacı olan üzerinde değiştirme yapmak isteyenler içinde yardımı olur. ben profesyonel değilim. geliştirmek isteyenler olacaktır. sizlere çok çok teşekkür ederim. konuyu çözdüm sorun kalmadı. sizlere minnettarım.
Plaka GiderTuru ToplaGiderTutar ToplaFaturaTutarı ToplaAlinanLitre ToplaAlinanTl ToplaIslemTutarı
35BTC943 Adblue 3801 3084706,63 16862 788078,81 143907
35BTC943 Diğer 3135 3084706,63 16862 788078,81 143907
35BTC943 Tamir&İşçilik 1300 3084706,63 16862 788078,81 143907
35BTC943 Yemek 4593,76 3084706,63 16862 788078,81 143907
gibi karmaşık bir şekilde görürsünüz. Bunu önlemek ve istediğiniz gibi sütunlar bazında listeleyebilmek için Gider tablosunda her bir gider türüne göre toplamları alan ve bunu tranform ederek sütun haline getiren crosstab sorgusunu oluşturmak ve kaydetmek ve birleşik sorguda gider tablosu yerine bu sorguyu kullanmak gerekir. bunun için bir crosstab sorusu oluşturduğumuzda
şeklinde olacaktır ve bunu örneğin GiderPivot adı ile kaydelim. Bu noktadan sonra ilk talebinizdeki 08_Gider tablosu yerine bu sorguyu kullanarak istediğimiz toplaları sizin istediğiniz şekilde listeleyebiliriz. Bu durumda da yeni sorgumuzTRANSFORM Sum([08_AracGiderKayit].Tutar) AS ToplamTutar
SELECT [01_TumAraclar].Plaka
FROM [01_TumAraclar]
INNER JOIN [08_AracGiderKayit] ON [01_TumAraclar].Plaka = [08_AracGiderKayit].PlakaNo
WHERE [08_AracGiderKayit].Tarih > #1/1/2025# AND [08_AracGiderKayit].Tarih < #3/31/2025#
GROUP BY [01_TumAraclar].Plaka
PIVOT [08_AracGiderKayit].GiderTuru IN ('Adblue', 'Diğer', 'Akaryakıt', 'Yemek', 'Tamir&İşçilik');
şeklinde olmalıdır.SELECT
G.Plaka,
Nz(G.[Diğer], 0) AS ToplaDigerTutarı,
Nz(G.[Adblue], 0) AS ToplaAdblueTutarı,
Nz(G.[Akaryakıt], 0) AS ToplaAkarkayıtTutarı,
Nz(G.[Tamir&İşçilik], 0) AS ToplaTamiratTutarı,
Nz(G.[Yemek], 0) AS ToplaYemekTutarı,
Nz(F.ToplaFaturaTutarı, 0) AS ToplaFaturaTutarı,
Nz(AK.ToplaAlinanTl, 0) AS ToplaAlinanTl,
Nz(H.ToplaIslemTutarı, 0) AS ToplaIslemTutarı
FROM
(((GiderPivot AS G
LEFT JOIN (
SELECT Plaka, Sum(FaturaTutarı) AS ToplaFaturaTutarı
FROM [05_HabasGelir]
WHERE Tarih > #1/1/2025# AND Tarih < #3/31/2025#
GROUP BY Plaka) AS F ON G.Plaka = F.Plaka)
LEFT JOIN (
SELECT PlakaNo, Sum(AlinanTl) AS ToplaAlinanTl
FROM [06_AkaryakitSarf]
WHERE Tarih > #1/1/2025# AND Tarih < #3/31/2025#
GROUP BY PlakaNo) AS AK ON G.Plaka = AK.PlakaNo)
LEFT JOIN (
SELECT Plaka, Sum(IslemTutarı) AS ToplaIslemTutarı
FROM [07_HgsKayit]
WHERE GirisTarihi > #1/1/2025# AND GirisTarihi < #3/31/2025#
GROUP BY Plaka) AS H ON G.Plaka = H.Plaka);
Sorgu İçin Yardım Lütfen
Bu Konudaki Yorumlar |
Sorgu İçin Yardım Lütfen - Yazar: mzizmir35mz - 21/07/2025, 16:26
RE: Sorgu İçin Yardım Lütfen - Yazar: atoykan - 24/07/2025, 03:36
RE: Sorgu İçin Yardım Lütfen - Yazar: mzizmir35mz - 24/07/2025, 10:53
|
Konuyu Okuyanlar: 1 Ziyaretçi