如何基于两列进行透视

Posted

技术标签:

【中文标题】如何基于两列进行透视【英文标题】:How to pivot based on two column 【发布时间】:2014-09-16 06:47:43 【问题描述】:

我有一张如下表

我的预期输出如下。

SQL Fiddle for this problem

在预期输出中,它需要通过 id 和 date 的组合进行旋转。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

sql lite 中没有任何PIVOT 函数。您提供的链接指向哪个链接。但你可以这样做:

SELECT
    yourtable.Id,
    yourtable.Date,
    MAX(CASE WHEN [Type]=1 THEN [Value] ELSE NULL END) AS [1],
    MAX(CASE WHEN [Type]=2 THEN [Value] ELSE NULL END) AS [2],
    MAX(CASE WHEN [Type]=3 THEN [Value] ELSE NULL END) AS [3]
FROM
    yourtable
GROUP BY
    yourtable.Id,
    yourtable.Date

如果您想使用枢轴执行此操作并且正在使用 MSSQL 2012。那么您可以这样做:

SELECT
*
FROM
(
SELECT
    yourtable.Id,
    yourtable.Date,
    yourtable.Type,
    yourtable.Value
FROM
    yourtable
) AS sourceTable
PIVOT
(
    MAX(Value)
    FOR Type IN([1],[2],[3],[4])
) AS pvt

这将导致:

1   2014-04-01 00:00:00.000 23  NULL    NULL    NULL
2   2014-04-01 00:00:00.000 56  NULL    NULL    NULL
3   2014-04-01 00:00:00.000 12  78      NULL    NULL
2   2014-07-01 00:00:00.000 56  NULL    NULL    NULL
3   2014-07-01 00:00:00.000 12  78      33      NULL

【讨论】:

以上是关于如何基于两列进行透视的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中对两列进行透视和排序?

如何根据数据透视表中两列(两个外键)中的 ID 返回相关模型?

比较数据透视表中计算字段中的两列错误

合并数据透视表中的两列

数据透视表:隐藏两列不为空的行

Oracle SQL 数据透视表从一列变为两列