如何在MySQL或SSIS中透视不唯一的列?

时间:2014-09-06 15:15:05

标签: mysql sql ssis

我有一个如下所示的MySQL输入表。主键由PID和MID组成。

PID | MID | VAL
---------------
 1  |  1  | 50
 1  |  2  | 51
 1  |  3  | 52
 1  |  4  | 53
 2  |  1  | 25
 2  |  2  | 26
 3  |  1  | 11
 3  |  1  | 12
 3  |  2  | 13

我需要以下格式,您可以看到固定数量的50个MID在列中,所有可用的PID都在行中。 PID应该是主键:

PID |  MID1  |  MID2  |  MID3  |  MID4  |  MID5  | .... | MID50  
---------------------------------------------------------------
 1  |   50   |   51   |   52   |   53   |    ..(null)..
 2  |   25   |   26   |      ..(null)..
 3  |   12   |   13   |      ..(null)..

关于SSIS:根据MSDN Pivot Article,PIVOT转换"通过将唯一值从表达式中的一列转换为多列来旋转表值表达式在输出" 所以我认为这不适用于我的情况,因为MID不是唯一的。

在SQL / MySQL中,我不是专家,所以我希望你能帮助我。我已经看过MySQL Pivot查询here,在我看来这是正确的方向,但无法使这个解决方案适应我的问题。

解决方案可能是MySQL-Query或SSIS转换。

1 个答案:

答案 0 :(得分:0)

这些内容

SELECT
    pid,
    MAX(CASE mid WHEN 1 THEN val ELSE NULL END) as MID1,
    MAX(CASE mid WHEN 2 THEN val ELSE NULL END) as MID2,
    MAX(CASE mid WHEN 3 THEN val ELSE NULL END) as MID3,
    MAX(CASE mid WHEN 4 THEN val ELSE NULL END) as MID4,
    MAX(CASE mid WHEN 5 THEN val ELSE NULL END) as MID5,
    MAX(CASE mid WHEN 6 THEN val ELSE NULL END) as MID6
FROM inputTable
GROUP BY pid;

DEMO