2015-09-23 32 views
1

我遇到問題。將行值連接到每個組的單行

表1名稱:InvoiceDetail

InvoiceNo  StockCode  Piece 
----------  -----------  ------ 
1    CP-001   10 
1    CP-002   15 
2    CP-001   18 
2    MN-001   18 

表2名稱:庫存

StockCode  StockName 
-----------  ----------- 
CP-001   Computer-A 
CP-002   Computer-B 
MN-001   Monitor-A 

預期結果

InvoiceNo  Description     TotalPiece 
----------  -----------------------  ---------- 
1    Computer-A, Computer-B   25 
2    Computer-A, Monitor-A    36 

我寫了下面的查詢

查詢

SELECT InvoiceNo, 
     (select StockName + '-' from Stock 
    where StockCode = Results.StockCode 
    order by StockName 
    FOR XML PATH('')) AS Description, 
    SUM(Piece) AS TotalPiece 
FROM InvoiceDetail Results 
GROUP BY InvoiceNo, Results.StockCode 
ORDER BY InvoiceNo 

和結果

InvoiceNo Description TotalPiece 
1   Computer-A- 10 
1   Computer-B- 15 
2   Computer-A- 18 
2   Monitor-A- 18 

的哪些錯誤?

+1

我喜歡目前的結果! – jarlh

回答

1

分別執行group by的CTE,然後你就可以放心地串聯的描述作爲一個單獨的步驟:

with InvoiceGroupings as (
    select t.InvoiceNo, 
     sum(t.Piece) as TotalPiece 
    from InvoiceDetail t 
    group by t.InvoiceNo) 
select g.InvoiceNo, 
     stuff((select ', ' + s.StockName 
       from InvoiceDetail i 
       join Stock s 
       on i.StockCode = s.StockCode 
       where i.InvoiceNo = g.InvoiceNo 
       order by s.StockName 
       for xml path('')),1,2,'') as Description, 
     g.TotalPiece 
    from InvoiceGroupings g 
order by g.InvoiceNo 

SQL Fiddle Demo