如何将多个列值合并到一个列中?

时间:2011-09-26 04:33:13

标签: sql-server ssis etl

我的源报告看起来像

Name Q1 Q2 Q3 Q4
A    1  2  3  4
B    5  6  7  8
C    9  0  1  2

必须将其转换为以下格式

Name Quarter Value
A    Q1      1
A    Q2      2
A    Q3      3
A    Q4      4 
and so on...

我正在使用SSIS进行ETL。没有在T-SQL脚本中使用硬编码值的任何指针?

1 个答案:

答案 0 :(得分:1)

这对于UNPIVOT来说是一个很好的匹配,但是除非你愿意把它变成一个动态的sql语句,否则我没有看到在语句中对Quarters进行硬编码的方法。

SQL语句

SELECT  Name
        , Quarter
        , Value 
FROM    q 
UNPIVOT (
          Value FOR Quarter IN (Q1, Q2, Q3, Q4)
        ) u

测试脚本

;WITH q (Name, Q1, Q2, Q3, Q4) AS (
    SELECT 'A', 1, 2, 3, 4
    UNION ALL SELECT 'B', 5, 6, 7, 8
    UNION ALL SELECT 'C', 9, 0, 1, 2
)
SELECT  Name
        , Quarter
        , Value 
FROM    q 
UNPIVOT (
            Value FOR Quarter IN (Q1, Q2, Q3, Q4)
        ) u