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

SQL将多行动态字段查询结果合并为单行列转行实现方法

要实现每个Record_ID对应唯一一行的效果,核心是对你当前的查询结果按Record_ID分组,用聚合函数提取各字段的非空值即可。你原查询中每个CASE语句仅在匹配对应Dynamic_Field_ID时返回有效值,其余均为NULL,使用MAX/MIN这类聚合函数会自动忽略NULL值,刚好能取出每个字段对应的值。

修改后的SQL语句如下:

SELECT 
       tabDynValues.Record_ID,
       MAX(CASE Dynamic_Field_ID WHEN 755 THEN tabDynValues.Value_Char END) Filiale,
       MAX(CASE Dynamic_Field_ID WHEN 756 THEN tabDynValues.Value_Double END) AD,
       MAX(CASE Dynamic_Field_ID WHEN 757 THEN tabDynValues.Value_Double END) Vertrieb,
       MAX(CASE Dynamic_Field_ID WHEN 758 THEN tabDynValues.Value_Double END) Expansion
  FROM CI_AM_Dynamic_Field_Value tabDynValues
 WHERE tabDynValues.Activity_ID = 100612
   AND tabDynValues.Dynamic_Field_ID IN (SELECT Dynamic_Field_ID
                                           FROM CI_AM_Dynamic_Field
                                          WHERE Dynamic_Field_Group_ID = 238)
GROUP BY tabDynValues.Record_ID
ORDER BY tabDynValues.Record_ID

改动说明

  • 移除了SELECT列表中的Dynamic_Field_ID字段,你预期输出中该列为空,且分组后同个Record_ID对应多个动态字段ID,无需保留该字段
  • 为每个CASE判断语句外层套了MAX聚合函数,自动过滤NULL值,提取同个Record_ID下对应字段的有效值
  • 新增GROUP BY tabDynValues.Record_ID子句,按记录ID分组,确保每个Record_ID最终仅输出一行
  • 移除了ORDER BY子句中的Dynamic_Field_ID排序规则,分组后无需再按动态字段ID排序

上述写法是SQL通用的行转列实现方案,兼容所有主流关系型数据库。如果你使用的数据库支持PIVOT语法(如SQL Server、Oracle、PostgreSQL 15及以上版本),也可以用PIVOT关键字实现同等效果,写法会更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:15:03