【问题标题】:Translate rows to column [duplicate]将行转换为列[重复]
【发布时间】:2015-08-06 17:22:05
【问题描述】:

我在数据库中有一些项目,格式如下:

ID|ColName|ColValue
-------------------
1 |A      |1testa
1 |B      |1testb
1 |C      |1testc
1 |D      |1testd
2 |A      |2testa
2 |D      |2testd

我需要以下表格的数据:

ID| A      | B      | C      | D
1 | 1testa | 1testb | 1testc | 1testd
2 | 2testa | NULL   |   NULL | 2testd

我曾尝试在T-SQL 中使用PIVOT,但它需要聚合函数作为参数,我不想提供。

我怎样才能做到这一点。

【问题讨论】:

标签: sql sql-server tsql pivot


【解决方案1】:

以下代码:

DECLARE @DataSource TABLE
(
     [ID] TINYINT
    ,[ColName] CHAR(1)
    ,[ColValue] VARCHAR(12)
);

INSERT INTO @DataSource ([ID], [ColName], [ColValue])
VALUES   (1, 'A', '1testa')
        ,(1, 'B', '1testb')
        ,(1, 'C', '1testc')
        ,(1, 'D', '1testd')
        ,(2, 'A', '2testa')
        ,(2, 'D', '2testd');

SELECT *
FROM @DataSource
PIVOT
(
    MAX([ColValue]) FOR [ColName] IN ([A], [B], [C], [D])
) PVT

会给你这个:

请注意,当您使用PIVOT/UNPIVOT 子句时,您需要指定列(在您的情况下为ABCD)。如果您不想进行硬编码,则需要使用构建动态枢轴 - 这可以通过在 string 中构建 T-SQL 语句并使用 sp_executesql 执行它来完成。

【讨论】:

  • 哦,所以我在想应该使用什么聚合函数。我需要使用 MAX。谢谢!
  • @Saksham 是的,您可以使用MINMAX 在按字符串旋转时使用。
猜你喜欢
  • 2013-10-01
  • 1970-01-01
  • 2022-01-20
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2022-01-02
相关资源
最近更新 更多