横向列到sql server中的矩阵行

时间:2014-05-09 20:04:50

标签: sql sql-server sql-server-2008

我有像

这样的场景
Account_Number | Ins1     |Ins2  | Ins3
8923647324     | 3        | 1    |  5
128736244      | 5        | 2    |  6
9238475323     | 6        | 3    |  7

我想实现像

这样的东西
8923647324     | 3     
8923647324     | 1      
8923647324     | 5
128736244      | 5
128736244      | 2
128736244      | 6  

可以使用UNION完成。但是要寻找一些不会影响数据检索性能的内置功能。而且,我没有任何线索。任何人都可以帮助我。

3 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点:

使用UNION

SELECT  Account_Number,
        Ins1 AS Ins
FROM YourTable
UNION ALL
SELECT  Account_Number,
        Ins2
FROM YourTable
UNION ALL
SELECT  Account_Number,
        Ins3
FROM YourTable

使用CROSS APPLY

SELECT  t.Accoun_Number,
        x.Ins
FROM YourTable t
CROSS APPLY 
(
    VALUES
        (t.Ins1),
        (t.Ins2),
        (t.Ins3)
) x (Ins);

我会使用UNPIVOT添加一种方法,但我会留给您研究。

答案 1 :(得分:2)

您可以使用UNPIVOT

SELECT Account_Number, Ins
FROM tbl
UNPIVOT
(
    Ins FOR Val IN (Ins1, Ins2, Ins3)   
) as unp

答案 2 :(得分:0)

select Account_Number, Ins1 as Value from mytable 
UNION ALL
select Account_Number, Ins2 as Value from mytable
UNION ALL
select Account_Number, Ins3 as Value from mytable