我在Sql Server 2008 R2中有一個包含產品訂單的表。在大多數情況下,它是每個產品SQL Server Recusive Query
ID | Prod | Qty
------------
1 | A | 1
4 | B | 1
7 | A | 1
8 | A | 1
9 | A | 1
12 | C | 1
15 | A | 1
16 | A | 1
21 | B | 1
我想在此基礎上看起來是這樣的
ID | Prod | Qty
------------------
1 | A | 1
4 | B | 1
9 | A | 3
12 | C | 1
16 | A | 2
21 | B | 1
我已經寫了使用表表達式的查詢表中創建一個視圖中的一個條目,但我很難理解如何使它工作。下面的SQL實際上不起作用,但是我正在嘗試做的一個示例。我用多種不同的方式編寫了這個查詢,但無法弄清楚如何獲得正確的結果。我正在使用row_number生成順序標識。從那以後,我可以對連續行進行排序和比較,以查看下一行是否具有與上一行相同的產品,因爲ReleaseId是順序的,但不一定是連續的。任何幫助表示讚賞。
;with myData AS
(
SELECT
row_number() over (order by a.ReleaseId) as 'Item',
a.ReleaseId,
a.ProductId,
a.Qty
FROM OrdersReleased a
UNION ALL
SELECT
row_number() over (order by b.ReleaseId) as 'Item',
b.ReleaseId,
b.ProductId,
b.Qty
FROM OrdersReleased b
INNER JOIN myData c ON b.Item = c.Item + 1 and b.ProductId = c.ProductId
)
SELECT * from myData
作爲替代方案,我試圖書面方式像這樣;具有myData的AS ( SELECT ROW_NUMBER()以上(由ord.ReleaseId順序)爲 '項目', ord.ReleaseId, \t ORD .ProductId, ord.Qty FROM \t \t ORD OrdersReleased ) SELECT MAX(c.ReleaseId)作爲 '釋放', \t c.ProductId, 總和(C .Qty)爲 '數量' FROM \t \t ÇmyData的LEFT JOIN myData的d ON d.Item = c.Item + 1和d.productid = c.productid 組由c.item,c.releaseid,C。 productid,c.qty order by c.ReleaseId –