MsSql Lead() – Lag()
Kullandığımız Mssql tabanlı Erp sistemlerinde, bazen kullanıcılar bir rapor içerisinde yer alan veriler üzerinde numaralandırma yapmak isteyebilirler. örneğin herhangi bir satış raporu içerisinde lokasyonların satış raporundaki yeri kaçıncı sırada gibi. bu tür durumlarda en son kullanmış olduğum fonksiyonlardan en önemli iki tanesi şunlar.
LEAD() — bu fonksiyon kayıtlar içerisinde ileri hareket eder. yani sıralamalı bir raporda kaydın hangisi olduğunu verebilir.
LAG() — bu fonksiyon kayılar içerisinde geriye doğru hareket eder. yani sıralamalı bir raporda kaydın hangisi olduğunu verebilir.
Mağaza sıralamalı bir satış raporu çekmek istediğinizde,
bu fonksiyonları kullanabilirsiniz.
lead() —
LEAD ( scalar_expression [ ,offset ] , [ default ] ) OVER ([ partition_by_clause] order_by_clause)
lag()—
LAG ( scalar_expression [ ,offset ] , [ default ] ) OVER ([ partition_by_clause] order_by_clause)
örnek;
,lead (sum (Loc_NetAmount)) over (order by sum (Loc_NetAmount)) as OncekiKayitTutar ,lag (sum (Loc_NetAmount)) over (order by sum (Loc_NetAmount)) as SonrakiKayitTutar
No Magaza adı Adet NetTutar OncekiKayitMiktar SonrakiKayitMiktar OncekiKayitTutar SonrakiKayitTutar OncekiMagaza SonrakiMagaza
1 A MAGAZASI 3395 18576 NULL 2439 NULL 14581,09 NULL D MAGAZASI
2 D MAGAZASI 2439 14581 3395 1963 18575,69 11732,93 A MAGAZASI C MAGAZASI
3 C MAGAZASI 1963 11733 2439 1274 14581,09 10779,04 D MAGAZASI E MAGAZASI
4 E MAGAZASI 1274 10779 1963 1379 11732,93 9336,88 C MAGAZASI L MAGAZASI
örnek
SELECT -1 + ROW_NUMBER () OVER (ORDER BY CEILING(SUM ([doc_TaxBase])) DESC) AS “No”, COALESCE(Cod.OfficeDescription,’Genel Toplam’) AS ‘Magaza Adi’ ,sum ([Qty1]) AS Adet ,ROUND (sum (Loc_NetAmount),0) AS NetTutar FROM AllInvoices INNER JOIN cdOfficeDesc cod ON AllInvoices.OfficeCode=cod.OfficeCode WHERE AllInvoices.IsCompleted=’1′ AND AllInvoices.InvoiceDate=CONVERT (VARCHAR,GETDATE(),102) AND AllInvoices.TransTypeCode=’2′ GROUP BY cod.OfficeDescription WITH ROLLUP ORDER BY SUM (Loc_NetAmount) DESC