2017-08-07 58 views
0

Please click to see image of data源数据 部门val_y X1 VAL1 X1 VAL2 X1 VAL3 X1 VAL4 X1 val5 X2 val7 X2的Val8 X2 val9SQL Server的支点为列

我希望它转化成

部门val_x1 val_x2 val_x3 val_x4 val_x5 val_x6 val_x7 val_x8 val_x9 X1 VAL1 VAL2 VAL3 VAL4 val5空空空空 X2 VAL 7 val8 val9 null null null null null null

因此,如果我有另一个有N行的部门,val_x1到val_xN的列将使用列val_y中的值填充,而列val_xN + 1到val_x9将为null(假设N < 9)。

在此先感谢。

+0

搜索支点? –

+0

请点击上面的链接查看源数据的图像和变换之后。 – nsimbulan

+0

@ Kannan ..我寻找关键点,但答案不给我我需要的。或者,也许我不完全了解提议的解决方案。 – nsimbulan

回答

0

可以使用旋转如下:如下

Select dept, [1] as Val_x1, [2] as Val_x2, [3] as Val_x3, [4] as Val_x4, [5] as Val_x5 from 
(Select dept, val_y, RowN = Row_Number() over (partition by dept order by val_y) from #data1) a 
pivot (max(val_y) for RowN in([1],[2],[3],[4],[5] --...yourlist of columns 
)) p 

输出:

+------+--------+--------+--------+--------+--------+ 
| dept | Val_x1 | Val_x2 | Val_x3 | Val_x4 | Val_x5 | 
+------+--------+--------+--------+--------+--------+ 
| x1 | val1 | val2 | val3 | val4 | val5 | 
| x2 | val7 | val8 | val9 | NULL | NULL | 
+------+--------+--------+--------+--------+--------+ 
+0

谢谢...这是更接近。 但我想val_y值按照它们出现在表源上的顺序进行转换。 例如,如果val2出现在x1部门的val1之前,那么Val_x1应该有val2。 – nsimbulan

+0

在这种情况下,您需要从源表(如id)或日期 –

+0

订购列SQL Server会生成%% LockRes %%,它是某种行号。 我如何使用它来订购? – nsimbulan