2015-09-23 2 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 

я написал ниже запрос

Query

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 отдельно в КТР, а затем вы можете смело сцепить описание в качестве отдельного шага:

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

Смежные вопросы