我需要转置如下所示的数据。我不需要使用任何聚合函数,只想将列转换为行。
当前观点:
Name | Code1 | Code2 | Code3 | Pct1 | Pct2 | Pct3 | Amt1 | Amt2 | Amt3
Name1 123 124 125 50 25 25 1000 1500 1555
Name2 123 124 125 50 25 25 1222 1520 1600
我需要的是什么:
AccountName | Code# | Pct | Amt
Name1 123 50 1000
Name1 124 25 1500
Name1 125 25 1555
Name2 123 50 1222
Name2 124 25 1520
Name2 125 25 1600
如果可以的话,如果我需要在不同的表中使用数据,你还可以包括我将联接放在哪里吗?
我正在使用SQL Server Management Studio 2014,但我没有创建表的权限
答案 0 :(得分:2)
使用表值表达式
这是一个巧妙的技巧SELECT [Name], ca.*
From myTable
CROSS APPLY (Values
(Code1, Pct1, Amt1),
(Code2, Pct2, Amt2),
(Code3, Pct3, Amt3)
) ca([Code#], [Pct], [Amt])
答案 1 :(得分:0)
这样的东西?
NameError Traceback (most recent call last)
<ipython-input-34-747daa8afe0d> in <module>()
1 get_ipython().magic(u'pylab inline')
----> 2 xyplt = plt.plot(x, y, linestyle='dashed', marker='o', color='red')
NameError: name 'x' is not defined
答案 2 :(得分:0)
select
Name,
case n when 1 then Code1 when 2 then Code2 when 3 then Code3 end as Code,
case n when 1 then Pct1 when 2 then Pct2 when 3 then Pct3 end as Pct,
case n when 1 then Amt1 when 2 then Amt2 when 3 then Amt3 end as Amt
from T cross join (values (1), (2), (3)) multiplier(n)
基本思路是将行重复三次,然后使用case
选择正确的值。