SQL Sorgu Kurgusu

mustafakoker

MUSTAFA KÖKER
Altın Üye
Katılım
20 Haziran 2008
Mesajlar
697
Excel Vers. ve Dili
Microsoft Office ev ve iş 2019
Merhabalar,
Sql için bir sorgu kurgusuna ihtiyacım var aşağıdaki şartları nasıl yerine getiren bir sorgu yazabiliriz.

Temmuz ayında A ltd şti'ne yapmış olduğum Satış faturalarının
Grupkodu1, ve Grupkodu2 nin toplamı 5.000'den büyük ise
Grupkodu2 nin Toplam Fatura sayısı ve Toplam Tutarını versin
ekteki sorgumu revize edecek koda ihtiyacım var..
 

Ekli dosyalar

mustafakoker

MUSTAFA KÖKER
Altın Üye
Katılım
20 Haziran 2008
Mesajlar
697
Excel Vers. ve Dili
Microsoft Office ev ve iş 2019
Zeki bey
Şu an kullandığım sorgu yukarıdaki örnek değil
Having sum ile 5bin üstünü bulabiliyorum
Ama temmuzda Ba Bs formları için kanun değişti.

--İSTEDİĞİM SORGU
AYNI FİRMADAN AYNI AY İÇİNDE E-FATURA VE KAĞIT FATURA TOPLAMLAMLARI 5.000TL ve üst tutarını geçerse sadece kağıt faturaların adedi ve tutarını istiyorum.
Örnek
2021/Temmuz ayı içinde X firmadan Form Ba KDV hariç 4.800TL tutarında e-Fatura ve her biri 150TL tutarında 2adet kâğıt fatura düzenlenmiştir.
aynı ay içerisinde B firmasınca düzenlenen belge tutarı toplamı KDVhariç(4.800+150+150)=5.100TLolduğundan,
2021/Temmuz dönemi Form Ba bildiriminde sadece kâğıt ortamında düzenlenen 2 adet belgeyi,
KDV hariç toplam 300 TL olarak bildirecektir.

SELECT
CariAd,vkn, evrak as 'belge adeti'
KdvHaricTL
FROM cari
Bundan sonrası için yukarıda verdiğim iki şart?
 

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
Merhaba;

Meslek icabı bahsettiğiniz B formu bildirim konusundaki mevzuyu biliyorum.

Database yapısını görmeden, sadece burada yapacağınız tariflere uyarak yardımcı olamayabiirim ancak, isabetli bir sorgu için fikir verebilirim.

Her cari için fatura tablosundan hem genel 5000 limitli genel toplamlar ile, kağıt fatura toplamlarını ayrı ayrı ve yan yana almayı başarabilirseniz problem kendiliğinden çözülmüş olur.

Toplamları alırken tabloda o kaydın E-Fatura mı yoksa kağıt fatura mı olduğunu anlamak nasıl kayıt attığınıza ve kullandığınız programa (Evrak seri no ayrı veya bitişik olabilir) bağlı... E-Fatura numaralarının sıfırları atarak kısaltan kişiler de olabileceği ihtimali ayrı bir kaos....

Kayıtlarınızda belge numarası tam olarak yazılıyorsa uzunluğa eşit olmayanları toplattığınızda kağıt fatura toplamını da kolayca elde etmiş olursunuz.

Umarım açıklamalarım yardımcı olur....
 

mustafakoker

MUSTAFA KÖKER
Altın Üye
Katılım
20 Haziran 2008
Mesajlar
697
Excel Vers. ve Dili
Microsoft Office ev ve iş 2019
Zeki bey merhaba yukarıda ki resimde sizin bahsetmiş olduğunuz seri no veya uzunluk gibi işlemlere benim için gerek yok çünkü tabloya kayıt atarken
Alış faturalarını işlerken GK_1'e E fatura veya Kağıt fatura diye işliyoruz
Yukarıdaki sorguma Having sum eklediğim de 5bin üstünü getiriyor
Belge cinsi e fatura veya kağıt fatura gibi ek kolon da görüyorum hatta excelden Pivot yapınca aslında amacıma ulaşmış oluyorum

Benim derdim excele alıp piyot yapmadan tek sorgu ile SQL tarafında oluyormu

Şu an case when ile Grup kodu1 e belge cinsini ayırt ettiriyorum

Ama Having işi bozuyor 5bin sınırını çözemedim if else mi kullanmak gerekir

Grupkodu1, ve Grupkodu2 nin toplamı 5.000'den büyük ise
Grupkodu2 nin Toplam Fatura sayısı ve Toplam Tutarını versin
 

mustafakoker

MUSTAFA KÖKER
Altın Üye
Katılım
20 Haziran 2008
Mesajlar
697
Excel Vers. ve Dili
Microsoft Office ev ve iş 2019
Bu sorgunun amacı firma bazında ay bazında toplam alış fatura tutarları 5.000 den büyük ise sadece kağıt fatura toplamını alır

Bu vesile ile @vedatozer hocama tekrardan teşekkür ediyorum. Sorun çözülmüştür.
Allah razı olsun
Hayırlı bayramlar.

Vedat Özer, [17.07.21 13:34]
;WITH DETAY as
(
SELECT
MONTH (TARIH) AS [Ay],
STOK74E.CH_KODU AS [Cari Kodu],
CARI00.AD +''+CARI00.NAME2 AS [Cari Ünvanı],
CARI00.VERGIDAIRESI AS [Vergi Dairesi],
CARI00.VERGINO AS [Vergi No],
STOK74E.EVRAKNO AS [Belge No],
CARI00.TCKIMLIKNO AS [T_C Kimlik No],
STOK74E.TL_ISKONTOLUTOPLAM AS [KDV Hariç Tutar],
CARI00.EMAIL AS [Cari E-mail],
CASE
WHEN STOK74E.GK_1='E-Fatura' THEN 'E-Fatura'
WHEN STOK74E.GK_1='Kağıt Fat.' THEN 'Kağıt Fatura'
WHEN STOK74E.GK_1=''THEN 'Boş Grup Kodu' END AS [Belge Cinsi]
FROM STOK74E
JOIN CARI00 ON STOK74E.CH_KODU=CARI00.KOD
where CH_KODU ='S-01-060'
),
BAGECENLER AS (
SELECT
[Ay],
[Cari Kodu],
[Cari Ünvanı],
[Vergi Dairesi],
[T_C Kimlik No],
COUNT ([Belge No] ) AS [Belge Sayısı],
SUM([KDV Hariç Tutar] ) AS [KDV Hariç Tutar],
[Cari E-mail]

FROM DETAY

GROUP BY
[Ay] ,
[Cari Kodu],
[Cari Ünvanı],
[Vergi Dairesi],
[Vergi No],
[T_C Kimlik No],
[Cari E-mail]

HAVING SUM([KDV Hariç Tutar] )>=5000
)

SELECT
([Ay]) AS [Ay],
[Cari Kodu],
[Cari Ünvanı],
[Vergi Dairesi],
[Vergi No],
[T_C Kimlik No],
COUNT ([Belge No]) AS [Belge Sayısı],
SUM([KDV Hariç Tutar] ) AS [KDV Hariç Tutar],
[Cari E-mail]


FROM DETAY AS LISTEM

WHERE EXISTS (SELECT [Cari Kodu] FROM BAGECENLER AS G WHERE G.[Cari Kodu] = LISTEM.[Cari Kodu] AND LISTEM.Ay=G.Ay )
AND LISTEM.[Belge Cinsi] IN ('Kağıt Fatura','Boş Grup Kodu')


GROUP BY ([Ay]) ,
[Cari Kodu],
[Cari Ünvanı],
[Vergi Dairesi],
[Vergi No],
[T_C Kimlik No],
[Cari E-mail]


ORDER BY [Cari Ünvanı]
 
Üst