Genel Bilgiler

SQL Server
View
⚠️ Devirde Güncellenmeli
23.12.2025 07:15
23.12.2025 16:10

Notlar

Düzenle

Henüz not eklenmemiş.

+ Not ekle

İstatistikler

7
Kod Analizi
52
Satır
2
Kullandığı
3
Kullanan

Kullandığı Nesneler (2)

JOINS
REFERENCES

Kullanan Nesneler (3)

Tam SQL Kodu

Düzenle
CREATE VIEW dbo.[001_PLASIYER_GIDER_LISTESI]
AS
SELECT        *
FROM            ((SELECT        KSL.DATE_ AS TARIH, KSL.LINEEXP AS ACK, KSL.TRNET AS TUTAR, SP2.DEFINITION_ AS PLAS, SP1.DEFINITION_ AS GIDER, MONTH(DATE_) AS AY, YEAR(DATE_) AS [YIL], 'KASA' AS TUR, 
                                                     CASE WHEN KSL.CUSTTITLE LIKE '%GENEL GIDER%' THEN '' ELSE KSL.CUSTTITLE END AS [DEF]
                            FROM            LG_011_08_KSLINES AS KSL LEFT OUTER JOIN
                                                     LG_011_SPECODES AS SP1 ON SP1.SPECODE = KSL.SPECODE AND SP1.CODETYPE = 1 AND SP1.SPECODETYPE = 44 LEFT OUTER JOIN
                                                     LG_011_SPECODES AS SP2 ON SP2.SPECODE = KSL.CYPHCODE AND SP2.CODETYPE = 2 AND SP2.SPECODETYPE = 44
                            WHERE        KSL.TRCODE = 12 AND KSL.SPECODE <> '' AND KSL.CYPHCODE <> '')

						                           UNION ALL
                         (SELECT        CLF.DATE_ AS TARIH,CC.DEFINITION_ +' '+ CLF.LINEEXP AS ACK, CLF.TRNET AS TUTAR, 'SIRKET'  AS PLAS, 'MAAS ÖDEME' AS GIDER, MONTH(DATE_) 
                                                   AS AY, YEAR(DATE_) AS YIL, 'KASA' AS TUR, CC.DEFINITION_ AS [DEF]
                          FROM            LG_011_08_CLFLINE AS CLF LEFT OUTER JOIN
                                                   LG_011_CLCARD AS CC ON CC.LOGICALREF = CLF.CLIENTREF
                          WHERE        CLF.TRCODE = 4 AND CLF.CANCELLED = 0 AND (CLF.LINEEXP LIKE '%MAAS%'))

UNION ALL
(SELECT        CLF.DATE_ AS TARIH, CLF.LINEEXP AS ACK, CLF.TRNET AS TUTAR, CASE WHEN CC.DEFINITION_ = 'MURAT ÜZÜM' THEN 'MURAT ÜZÜM' WHEN CC.DEFINITION_ = 'MURAT TURHAN' THEN NULL WHEN LEFT(CC.DEFINITION_,
                           CHARINDEX(' ', CC.DEFINITION_) - 1) = 'Ali' THEN 'Emre' ELSE LEFT(CC.DEFINITION_, CHARINDEX(' ', CC.DEFINITION_) - 1) END AS PLAS, 'YEMEK' AS GIDER, MONTH(DATE_) AS AY, YEAR(DATE_) AS YIL, 'KASA' AS TUR, 
                          CC.DEFINITION_ AS [DEF]
 FROM            LG_011_08_CLFLINE AS CLF LEFT OUTER JOIN
                          LG_011_CLCARD AS CC ON CC.LOGICALREF = CLF.CLIENTREF
 WHERE        CLF.TRCODE = 4 AND CLF.CANCELLED = 0 AND (CLF.LINEEXP LIKE '%YEMEK%'))
UNION ALL
(SELECT        BNL.DATE_ AS TARIH, BNL.GENEXP1 AS ACK, BNL.CREDITTOT AS TUTAR, SP2.DEFINITION_ AS PLAS, SP1.DEFINITION_ AS GIDER, MONTH(DATE_) AS AY, YEAR(DATE_) AS [YIL], 'BANKA' AS TUR, '' AS [DEF]
 FROM            LG_011_08_BNFICHE AS BNL LEFT OUTER JOIN
                          LG_011_SPECODES AS SP1 ON SP1.SPECODE = BNL.SPECODE AND SP1.CODETYPE = 1 AND SP1.SPECODETYPE = 43 LEFT OUTER JOIN
                          LG_011_SPECODES AS SP2 ON SP2.SPECODE = BNL.CYPHCODE AND SP2.CODETYPE = 2 AND SP2.SPECODETYPE = 43
 WHERE        BNL.SPECODE <> '' AND BNL.CYPHCODE <> '')
UNION ALL
(SELECT        CSR.DATE_ AS TARIH, CSR.GENEXP1 AS ACK, CSR.TRNET AS TUTAR, SP2.DEFINITION_ AS PLAS, SP1.DEFINITION_ AS GIDER, MONTH(DATE_) AS AY, YEAR(DATE_) AS [YIL], 'ÇEK' AS TUR, CC.DEFINITION_ AS [DEF]
 FROM            LG_011_07_CSROLL AS CSR LEFT OUTER JOIN
                          LG_011_CLCARD AS CC ON CC.LOGICALREF = CSR.CARDREF LEFT OUTER JOIN
                          LG_011_SPECODES AS SP1 ON SP1.SPECODE = CSR.SPECODE AND SP1.CODETYPE = 1 AND SP1.SPECODETYPE = 30 LEFT OUTER JOIN
                          LG_011_SPECODES AS SP2 ON SP2.SPECODE = CSR.CYPHCODE AND SP2.CODETYPE = 2 AND SP2.SPECODETYPE = 30
 WHERE        CSR.SPECODE <> '' AND CSR.CYPHCODE <> '')
UNION ALL
(SELECT        CAST(TRR.IslemTarihi AS DATE) AS TARIH, TRR.IstasyonAdi AS ACK, TRR.Tutar AS TUTAR, PRP.PLAS, 'YAKIT' AS GIDER, MONTH(TRR.IslemTarihi) AS AY, YEAR(TRR.IslemTarihi) AS [YIL], 'KASA' AS TUR, '' AS DEF
 FROM            dbo.TuketimRaporu AS TRR LEFT OUTER JOIN
                          dbo.PLAS_RAPOR_PLAKALAR AS PRP ON PRP.PLAKA = TRR.Plaka
 WHERE        PRP.PLAS IS NOT NULL)
UNION ALL
(SELECT        TTR.DATE_ AS TARIH, CONCAT(MONTH(TTR.DATE_), '. Ay Turkcell Fatura Ödeme') AS ACK, TTR.TRNET AS TUTAR, PRP.PLAS, 'TELEKOM ÖDEME' AS GIDER, MONTH(TTR.DATE_) AS AY, YEAR(TTR.DATE_) AS YIL, 
                          'BANKA' AS TUR, '' AS DEF
 FROM            (SELECT        LEFT(BNL.LINEEXP, CHARINDEX(' - ', BNL.LINEEXP)) AS ACK, TRNET, DATE_
                           FROM            LG_011_08_BNFLINE AS BNL
                           WHERE        BNL.TRCODE = 4 AND BNL.CANCELLED = 0 AND LINEEXP LIKE '%Turkcell%') AS TTR LEFT OUTER JOIN
                          dbo.PLAS_RAPOR_PLAKALAR AS PRP ON PRP.TELEFON = TTR.ACK
 WHERE        PRP.PLAS IS NOT NULL)) QQ
WHERE        QQ.YIL = 2025 AND (QQ.ACK NOT LIKE '%prim%');

Kodun Çalışma Mantığı (Adım Adım)

Analiz Ekle/Düzenle
Adım 1
SELECT KSL.DATE_ AS TARIH,
       KSL.LINEEXP AS ACK,
       KSL.TRNET AS TUTAR,
       SP2.DEFINITION_ AS PLAS,
       SP1.DEFINITION_ AS GIDER,
       MONTH(DATE_) AS AY,
       YEAR(DATE_) AS YIL,
       'KASA' AS TUR,
       CASE WHEN KSL.CUSTTITLE LIKE '%GENEL GIDER%' THEN '' ELSE KSL.CUSTTITLE END AS DEF
FROM LG_011_08_KSLINES AS KSL
LEFT JOIN LG_011_SPECODES AS SP1 ON SP1.SPECODE = KSL.SPECODE AND SP1.CODETYPE = 1 AND SP1.SPECODETYPE = 44
LEFT JOIN LG_011_SPECODES AS SP2 ON SP2.SPECODE = KSL.CYPHCODE AND SP2.CODETYPE = 2 AND SP2.SPECODETYPE = 44
WHERE KSL.TRCODE = 12 AND KSL.SPECODE <> '' AND KSL.CYPHCODE <> ''

Mantık:

  • Kasa satırlarından (KSLINES) gider çekiyor.

  • KSL.TRCODE = 12 ile belli tür kasa hareketlerini alıyor (sizde gider kaydı için kullanılan tür).

  • KSL.SPECODE → gider sınıfı gibi kullanılmış, SPECODES (CODETYPE=1) üzerinden GIDER adına çevriliyor.

  • KSL.CYPHCODE → plasiyer/kisi gibi kullanılmış, SPECODES (CODETYPE=2) üzerinden PLAS adına çevriliyor.

  • DEF: CUSTTITLE “GENEL GIDER” içeriyorsa boş geçiyor, değilse ünvanı yazıyor.

Adım 2
SELECT CLF.DATE_ AS TARIH,
       CC.DEFINITION_ +' '+ CLF.LINEEXP AS ACK,
       CLF.TRNET AS TUTAR,
       'SIRKET' AS PLAS,
       'MAAS ÖDEME' AS GIDER,
       MONTH(DATE_) AS AY,
       YEAR(DATE_) AS YIL,
       'KASA' AS TUR,
       CC.DEFINITION_ AS DEF
FROM LG_011_08_CLFLINE AS CLF
LEFT JOIN LG_011_CLCARD AS CC ON CC.LOGICALREF = CLF.CLIENTREF
WHERE CLF.TRCODE = 4 AND CLF.CANCELLED = 0 AND (CLF.LINEEXP LIKE '%MAAS%')

Mantık:

  • Cari hareket satırlarından (CLFLINE) “MAAS” geçenleri alıp gider yazıyor.

  • Burada plasiyer sabit: PLAS = 'SIRKET'

  • Gider sabit: GIDER = 'MAAS ÖDEME'

  • Açıklama: Cari ünvan + satır açıklaması birleştiriliyor.

Adım 3
SELECT CLF.DATE_ AS TARIH,
       CLF.LINEEXP AS ACK,
       CLF.TRNET AS TUTAR,
       CASE
         WHEN CC.DEFINITION_ = 'MURAT ÜZÜM' THEN 'MURAT ÜZÜM'
         WHEN CC.DEFINITION_ = 'MURAT TURHAN' THEN NULL
         WHEN LEFT(CC.DEFINITION_, CHARINDEX(' ', CC.DEFINITION_) - 1) = 'Ali' THEN 'Emre'
         ELSE LEFT(CC.DEFINITION_, CHARINDEX(' ', CC.DEFINITION_) - 1)
       END AS PLAS,
       'YEMEK' AS GIDER,
       MONTH(DATE_) AS AY,
       YEAR(DATE_) AS YIL,
       'KASA' AS TUR,
       CC.DEFINITION_ AS DEF
FROM LG_011_08_CLFLINE AS CLF
LEFT JOIN LG_011_CLCARD AS CC ON CC.LOGICALREF = CLF.CLIENTREF
WHERE CLF.TRCODE = 4 AND CLF.CANCELLED = 0 AND (CLF.LINEEXP LIKE '%YEMEK%')

Mantık:

  • Cari hareket satırlarında açıklamada “YEMEK” geçenleri alıyor.

  • PLAS alanını cari ünvanından türetmeye çalışıyor:

    • Ünvan “MURAT ÜZÜM” ise aynen yaz.

    • “MURAT TURHAN” ise PLAS’i NULL bırak.

    • Ünvanın ilk kelimesi “Ali” ise “Emre” yap (manual eşleme).

    • Diğer durumda ünvanın ilk kelimesini plasiyer olarak kullan.

  • Gider sabit: YEMEK

Burada CHARINDEX(' ', CC.DEFINITION_) - 1 kullanıldığı için ünvan içinde hiç boşluk yoksa hata riski olabilir (boşluk yoksa CHARINDEX 0 döner). Bu view’in sorunsuz çalışması için pratikte ünvanların boşluk içeriyor olması beklenmiş.

Adım 4
SELECT BNL.DATE_ AS TARIH,
       BNL.GENEXP1 AS ACK,
       BNL.CREDITTOT AS TUTAR,
       SP2.DEFINITION_ AS PLAS,
       SP1.DEFINITION_ AS GIDER,
       MONTH(DATE_) AS AY,
       YEAR(DATE_) AS YIL,
       'BANKA' AS TUR,
       '' AS DEF
FROM LG_011_08_BNFICHE AS BNL
LEFT JOIN LG_011_SPECODES AS SP1 ON SP1.SPECODE = BNL.SPECODE AND SP1.CODETYPE = 1 AND SP1.SPECODETYPE = 43
LEFT JOIN LG_011_SPECODES AS SP2 ON SP2.SPECODE = BNL.CYPHCODE AND SP2.CODETYPE = 2 AND SP2.SPECODETYPE = 43
WHERE BNL.SPECODE <> '' AND BNL.CYPHCODE <> ''

Mantık:

  • Banka fiş başlığından gider çekiyor (BNFICHE).

  • Tutar olarak CREDITTOT kullanılmış (kredi toplamı).

  • Gider ve plasiyer yine SPECODES üzerinden çözülüyor ama bu kez SPECODETYPE=43.

Adım 5
SELECT CSR.DATE_ AS TARIH,
       CSR.GENEXP1 AS ACK,
       CSR.TRNET AS TUTAR,
       SP2.DEFINITION_ AS PLAS,
       SP1.DEFINITION_ AS GIDER,
       MONTH(DATE_) AS AY,
       YEAR(DATE_) AS YIL,
       'ÇEK' AS TUR,
       CC.DEFINITION_ AS DEF
FROM LG_011_07_CSROLL AS CSR
LEFT JOIN LG_011_CLCARD AS CC ON CC.LOGICALREF = CSR.CARDREF
LEFT JOIN LG_011_SPECODES AS SP1 ON SP1.SPECODE = CSR.SPECODE AND SP1.CODETYPE = 1 AND SP1.SPECODETYPE = 30
LEFT JOIN LG_011_SPECODES AS SP2 ON SP2.SPECODE = CSR.CYPHCODE AND SP2.CODETYPE = 2 AND SP2.SPECODETYPE = 30
WHERE CSR.SPECODE <> '' AND CSR.CYPHCODE <> ''

Mantık:

  • Çek/senet bordrosu (CSROLL) tarafındaki hareketleri gider gibi listeye alıyor.

  • Gider/Plas yine SPECODES’tan, bu sefer SPECODETYPE=30.

  • DEF cari ünvan (CC.DEFINITION_) olarak doldurulmuş.

  • Burada tablonun LG_011_07_CSROLL olması dikkat: Kaynak dönem farklı (muhtemelen sistemde CSROLL bu dönemde tutulmuş veya yıllar karışık).

Adım 6
SELECT CAST(TRR.IslemTarihi AS DATE) AS TARIH,
       TRR.IstasyonAdi AS ACK,
       TRR.Tutar AS TUTAR,
       PRP.PLAS,
       'YAKIT' AS GIDER,
       MONTH(TRR.IslemTarihi) AS AY,
       YEAR(TRR.IslemTarihi) AS YIL,
       'KASA' AS TUR,
       '' AS DEF
FROM dbo.TuketimRaporu AS TRR
LEFT JOIN dbo.PLAS_RAPOR_PLAKALAR AS PRP ON PRP.PLAKA = TRR.Plaka
WHERE PRP.PLAS IS NOT NULL

Mantık:

  • Logo dışı yakıt tüketim raporu tablosundan satırlar geliyor.

  • Plaka üzerinden PLAS_RAPOR_PLAKALAR ile plasiyer bulunuyor.

  • Gider tipi sabit: YAKIT

  • Plasiyer bulunamayan satırlar filtreleniyor (PRP.PLAS IS NOT NULL).

Adım 7
SELECT LEFT(BNL.LINEEXP, CHARINDEX(' - ', BNL.LINEEXP)) AS ACK, TRNET, DATE_
FROM LG_011_08_BNFLINE AS BNL
WHERE BNL.TRCODE = 4 AND BNL.CANCELLED = 0 AND LINEEXP LIKE '%Turkcell%'

-----------------------------------------------------------------------------------

SELECT TTR.DATE_ AS TARIH,
       CONCAT(MONTH(TTR.DATE_), '. Ay Turkcell Fatura Ödeme') AS ACK,
       TTR.TRNET AS TUTAR,
       PRP.PLAS,
       'TELEKOM ÖDEME' AS GIDER,
       MONTH(TTR.DATE_) AS AY,
       YEAR(TTR.DATE_) AS YIL,
       'BANKA' AS TUR,
       '' AS DEF
FROM ( ... ) AS TTR
LEFT JOIN dbo.PLAS_RAPOR_PLAKALAR AS PRP ON PRP.TELEFON = TTR.ACK
WHERE PRP.PLAS IS NOT NULL

Mantık:

  • Banka satırlarından (BNFLINE) “Turkcell” geçen ödemeleri çekiyor.

  • LINEEXP içinden ' - ' ayracına kadar olan kısmı alıp ACK yapıyor (burada amaç genelde “telefon numarası” gibi bir şey yakalamak).

  • Bu ACK değerini PLAS_RAPOR_PLAKALAR.TELEFON ile eşleştirip plasiyeri buluyor.

  • Gider sabit: TELEKOM ÖDEME

  • Plasiyer bulunamayan satırları almıyor.

Burada da ' - ' geçmiyorsa CHARINDEX 0 döner; LEFT(...,0) boş kalır ve eşleşmez.