2016-10-15 2 views
0
KEY  DATE  STATUS  Item ORDEREDQTY SHIPPEDQTY  Concat (ouput) 
1  05/11/2015 Dispatch 123  3   1   1 | 05/11/2015 | Dispatch | 123 | 3 | 1 | 321 | 2 | 1 
1  05/11/2015 Dispatch 321  2   1 
2  14/11/2015 Dispatch 456  3   2   2 | 14/11/2015 | Dispatch | 456 | 3 | 2 | 678 | 2 | 1 
2  14/11/2015 Dispatch 678  2   1 

Как это сделать?Значение конкатенации по разделителю ключей на основе совпадения ключей

мне нужно сцепить Item, originalqty и shipqty если Key сопрягает. Выше имеет значение ключа как 1, а в столбце вывода я должен получить значение, имеющее ключ как 1, и конкатенацию последних трех столбцов.

ответ

1
Declare @YourTable table ([KEY] int,DATE date,STATUS varchar(50),Item int,ORDEREDQTY int,SHIPPEDQTY int) 
Insert Into @YourTable values 
(1,'2015-11-05','Dispatch',123,3,1), 
(1,'2015-11-05','Dispatch',321,2,1), 
(2,'2015-11-14','Dispatch',456,3,2), 
(2,'2015-11-14','Dispatch',678,2,1) 

Select A.* 
     ,ConcatString=Case when RowNr=1 then cast([Key] as varchar(25)) + ' | ' + cast(Date as varchar(25)) + ' | ' + Status + ' | ' + B.String else '' end 
From (Select *,RowNr = Row_Number() over (Partition By [KEY] Order by (Select NULL)) From @YourTable) A 
Cross Apply (
       Select String=Stuff((Select ' | ' + cast(Item as varchar(25)) + 
             ' | ' + cast(ORDEREDQTY as varchar(25)) + 
             ' | ' + cast(SHIPPEDQTY as varchar(25)) 
             From @YourTable 
             Where [Key]=A.[Key] 
             For XML Path ('')),1,3,'') 

      ) B 

Возвращает

enter image description here

+0

cappeletti: - Спасибо Вам большое за решение, но в вашей Отправке решения и дату повторяющиеся которые я не хочу. Не могли бы вы помочь мне в этом. – Somashekhar

+0

@SomashekharKendule На мгновение –

+0

@SomashekharKendule Быстрое исправление. Обновленный ответ –

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