2016-04-08 31 views
-2

sql eğer aşağıdaki sorgu var:Çoklu satır satır 2

SELECT dbo.SalesOrder.SalesOrderID, dbo.SalesOrder.SalesOrderNo, dbo.SalesOrder.SubTotal, dbo.PO.PONo 
FROM dbo.SalesOrder 
LEFT OUTER JOIN dbo.PO ON dbo.SalesOrder.SalesOrderID = dbo.PO.SalesOrderID 

Bu satış siparişleri, onların aratoplamlarını ve bağlı po en listesi gösterir. Aynı satış siparişine bağlı birden fazla po olduğunda, her po hattı için alt toplamı döndürür. Sadece bu siparişin ilk satırındaki alt toplamı göstermesini istiyorum. SQL Server 2012'de ise

example data

+0

sen (temelde birincil ve yabancı anahtar) tablo yapısını paylaşır – Ravi

+0

göster şimdi ne elde ve –

cevap

0

önceki satırla değerini karşılaştırmak için LAG kullanabilirsiniz. Değerleri önceki satırla karşılaştırmak için kullanıyorum - SalesOrderID ve PreviousSalesOrderID'u karşılaştırıyorum - SubTotal sütununu doldurmak için bildiğiniz fark varsa.

Çözüm:

SELECT SalesOrder.SalesOrderID, SalesOrder.SalesOrderNo, t1.PONo, 
(CASE 
    WHEN (t1.PreviousSalesOrderID IS NULL) OR (t1.PreviousSalesOrderID <> SalesOrder.SalesOrderID) THEN SalesOrder.SubTotal 
END) as SubTotal 
FROM (SELECT SalesOrder.SalesOrderID, PurchaseOrder.PONo, 
    LAG(SalesOrder.SalesOrderID) OVER (ORDER BY SalesOrder.SalesOrderID) AS PreviousSalesOrderID 
    FROM SalesOrder LEFT OUTER JOIN PurchaseOrder ON SalesOrder.SalesOrderID = PurchaseOrder.SalesOrderID) AS t1 
LEFT OUTER JOIN SalesOrder ON SalesOrder.SalesOrderID = t1.SalesOrderID 


Çıkış (beklenen çıkışı ile aynı):

SalesOrderID SalesOrderNo PONo SubTotal 
8    S00008   p7  1544 
9    S00009   p8  1644 
9    S00009   p262 NULL 
10    S00010   p263 4922 
10    S00010   p9  NULL 
11    S00011   p10  7805 
+0

GROUP almak istediğiniz ne olsa, her satır ayrı istiyorum, ancak sadece bu satırın ilk satırında göstermek için alt toplam satırı sadece SQL Server 2008 var, – khenry

+0

var bir 2008 için eşdeğer mi? – khenry

+0

Bu mümkündür: [SQL Server 2008 için LAG ve LEAD] (https://sqlscope.wordpress.com/2014/05/26/lag-and-lead-for-sql-server-2008/) – Antony