首页 > 数据库 > mysql教程 > 如何使用动态 SQL 将 DB2 中的行转换为列?

如何使用动态 SQL 将 DB2 中的行转换为列?

Patricia Arquette
发布: 2024-12-31 19:35:10
原创
788 人浏览过

How to Pivot Rows into Columns in DB2 Using Dynamic SQL?

使用动态 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板