使用动态 SQL 将行转换为 DB2 中的列
目标是对表中的数据进行透视,将行转换为列,以获得期望的输出。考虑以下表结构:
源表
ItemID | Item | Value |
---|---|---|
1 | Meeting | Now |
1 | Advise | Yes |
1 | NoAdvise | No |
2 | Meeting | Never |
2 | Advise | No |
2 | NoAdvise | Null |
2 | Combine | Yes |
所需输出
ItemID | Meeting | Advise | NoAdvise |
---|---|---|---|
1 | Now | Yes | No |
2 | Never | No | Null |
SQL使用关联查询子查询
实现此转换的一种方法是使用相关子查询:
SELECT A.ItemID, MAX(CASE WHEN A.Item = 'Meeting' THEN Value END) AS Meeting, MAX(CASE WHEN A.Item = 'Advise' THEN Value END) AS Advise, MAX(CASE WHEN A.Item = 'NoAdvise' THEN Value END) AS NoAdvise FROM A GROUP BY A.ItemID
此查询执行多个相关子查询,每个所需的输出列一个,以提取相应的值对于每一行。然后按 ItemID 列对结果进行分组以获得透视输出。
使用动态 SQL 的替代方法
另一种选择是利用动态 SQL 构建数据透视表。这种方法具有更大的灵活性,并且可以进行定制以生成所需的输出列:
DECLARE @cols AS NVARCHAR(MAX), @sql AS NVARCHAR(MAX) SET @cols = '' SELECT @cols += ',MAX(CASE WHEN Item = ''' + Item + ''' THEN Value END) AS ' + Item FROM ( SELECT DISTINCT Item FROM A ) AS Items SET @sql = 'SELECT ItemID, ' + SUBSTRING(@cols, 2) + ' FROM A GROUP BY ItemID' EXEC (@sql)
此查询根据 Item 列中的不同值动态构造 SQL 语句并执行它,生成透视输出.
以上是如何使用动态 SQL 将 DB2 中的行转换为列?的详细内容。更多信息请关注PHP中文网其他相关文章!