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

标签 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 查询或 SSIS 转换。

最佳答案

这些内容

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

关于mysql - 如何透视 MySQL 或 SSIS 中不唯一的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701693/

相关文章:

java - 无法使用executeQuery()发出数据操作语句

php - Mysql查询WHERE Json value = this

mysql - 给定一组值,什么 SQL 查询会在我的数据库中找到这些值最多的行?

mysql - 动态自引用多对多关系

mysql - SQL 合并相差 1 个参数的行

c# - 带 SSIS 包的 Winscp 给出 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)

sql-server - 将任务放入序列容器后无法连接到数据库

mysql - 单个查询获取多个日期的数据

sql-server-2008 - SSIS 包级别 OnError 发送两封电子邮件

mysql - 无法在 MySQL 中创建外键约束。错误编号 150