【问题标题】:SQL Transform Crosstab Pivot DataSQL 转换交叉表透视数据
【发布时间】:2016-05-18 03:59:18
【问题描述】:

我正在使用 SQL Server 2008,并希望将我的数据转换为:

数据集:

ID   Item  Columns  Result
1     1      X       A
2     1      Y       B
3     1      Z       C
4     2      X       D
5     2      Y       E
6     2      Z      NULL
7     3      X       F
8     3      Y       G
9     3      Z       H

期望的结果:

Item   X   Y   Z
 1     A   B   C
 2     D   E  NULL
 3     F   G   H

此时,我正在做以下事情,然后将我需要的列粘贴到 Excel 中:

Select * from thisTable where Column=X
Select * from thisTable where Column=Y
Select * from thisTable where Column=Z

但是,并非所有匹配的行都不能只是并排敲击表格。对于没有结果的列,我希望显示 NULL 以填充行以使它们的记录数相同。

我查找了 PIVOT,但我认为这在这里不起作用……这种类型的数据转换叫什么?我不认为这是一个交叉表...

谢谢!

【问题讨论】:

  • 我可以通过将此 SQL Server 报表生成器添加为列组来获得此结果,但我需要一个查询来执行此操作,而不是这次使用报表生成器...

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


【解决方案1】:

您可以使用条件聚合进行交叉表:

SELECT
    Item,
    [X] = MAX(CASE WHEN [Columns] = 'X' THEN Result END),
    [Y] = MAX(CASE WHEN [Columns] = 'Y' THEN Result END),
    [Z] = MAX(CASE WHEN [Columns] = 'Z' THEN Result END)
FROM thisTable
GROUP BY Item

【讨论】:

  • 谢谢!所以这实际上被称为“交叉制表”?这种转变还有其他名称吗?
  • 其他人称之为条件聚合。
【解决方案2】:

使用 PIVOT

select  *
from    (
            select  Item, Columns, Result
            from    thisTable 
        ) t
pivot   (
            max (Result)
            for Columns in (X, Y, Z)
        ) p

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多