Sie müssen dynamische SQL verwenden, wenn die maximale Anzahl von plan_date
unbekannt ist. Sie müssen row_number()
verwenden, um jede durch Child_Code
partitionierte Liste für die Verwendung mit pivot()
zu nummerieren.
Testaufbau:
create table t (child_code varchar(6), plan_date datetime);
insert into t values ('000001','20170221'),('000001','20170321');
declare @cols nvarchar(max);
declare @sql nvarchar(max);
select @cols = stuff((
select distinct
',' + quotename('Plan_Date_'
+convert(nvarchar(10),row_number() over (
partition by Child_Code
order by Plan_Date
))
)
from t
for xml path (''), type).value('.','nvarchar(max)')
,1,1,'');
select @sql = '
select Child_Code, ' + @cols + '
from (
select
Child_Code
, Plan_Date
, rn=''Plan_Date_''+convert(nvarchar(10),row_number() over (
partition by Child_Code
order by Plan_Date
))
from t
) as a
pivot (max([Plan_Date]) for [rn] in (' + @cols + ')) p';
select @sql as CodeGenerated;
exec sp_executesql @sql;
rextester Demo: http://rextester.com/YQCR87525
Code generiert:
select Child_Code, [Plan_Date_1],[Plan_Date_2]
from (
select
Child_Code
, Plan_Date
, rn='Plan_Date_'+convert(nvarchar(10),row_number() over (
partition by Child_Code
order by Plan_Date
))
from t
) as a
pivot (max([Plan_Date]) for [rn] in ([Plan_Date_1],[Plan_Date_2])) p
kehrt
+------------+---------------------+---------------------+
| Child_Code | Plan_Date_1 | Plan_Date_2 |
+------------+---------------------+---------------------+
| 000001 | 21.02.2017 00:00:00 | 21.03.2017 00:00:00 |
+------------+---------------------+---------------------+
Poss ible Duplikat von [Konvertieren von Zeilen in Spalten mit 'Pivot' in SQL Server] (http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server) –
Fügen Sie einige hinzu mehr Beispieldaten, um die Dinge schwieriger und beschreibender zu machen. (Wenn es immer zwei Daten pro Code gibt, kannst du eine Gruppe durchmachen.) – jarlh