SQL转置数据

时间:2016-06-16 18:33:45

标签: sql sql-server pivot transpose unpivot

我需要转置如下所示的数据。我不需要使用任何聚合函数,只想将列转换为行。

当前观点:

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,但我没有创建表的权限

3 个答案:

答案 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选择正确的值。