You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SMART400的WRKQRY中实现数据转置?

在SMART400的WRKQRY中实现数据转置

可以在WRKQRY中实现数据转置,但需要通过条件聚合+分组的方式完成,因为WRKQRY没有内置的转置函数。以下是具体实现步骤:

1. 原始数据说明

假设你的数据存储在名为SOURCE_TABLE的表中,包含两列:GROUP_COL(分组标识,如T1、T2)和VALUE_COL(待转置的值,如A1、A2),原始数据如下:

GROUP_COL VALUE_COL
T1        A1
T1        A2
T1        A3
T2        B1
T2        B2

2. 生成组内序列编号

首先为每个分组内的记录生成连续序列编号,用于后续映射到不同列。通过子查询结合ROW_NUMBER()窗口函数实现:

SELECT 
    GROUP_COL,
    VALUE_COL,
    ROW_NUMBER() OVER (PARTITION BY GROUP_COL ORDER BY VALUE_COL) AS SEQ_NUM
FROM SOURCE_TABLE

该查询会为每个分组内的记录分配从1开始的编号,例如T1组的三条记录对应1、2、3,T2组的两条记录对应1、2。

3. 条件聚合实现转置

基于上述子查询,使用CASE语句结合MAX()聚合函数,将不同序列编号的行值映射到对应列,最后按分组字段聚合:

SELECT 
    GROUP_COL,
    MAX(CASE WHEN SEQ_NUM = 1 THEN VALUE_COL ELSE '' END) AS COL1,
    MAX(CASE WHEN SEQ_NUM = 2 THEN VALUE_COL ELSE '' END) AS COL2,
    MAX(CASE WHEN SEQ_NUM = 3 THEN VALUE_COL ELSE '' END) AS COL3
FROM (
    SELECT 
        GROUP_COL,
        VALUE_COL,
        ROW_NUMBER() OVER (PARTITION BY GROUP_COL ORDER BY VALUE_COL) AS SEQ_NUM
    FROM SOURCE_TABLE
) AS SUB_QUERY
GROUP BY GROUP_COL

4. 最终输出结果

执行上述查询后,将得到期望的转置格式:

GROUP_COL COL1 COL2 COL3
T1        A1   A2   A3
T2        B1   B2   

注意事项

  • 若分组内的最大记录数超过3,需添加更多CASE语句(如SEQ_NUM=4对应COL4)覆盖所有可能的列。
  • 如果WRKQRY不支持ROW_NUMBER()窗口函数,可通过自连接方式生成序列编号,但效率会略低。

内容的提问来源于stack exchange,提问作者Asymptote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:42:16