SQL中如何基于指定ID实现行数据转对应值的透视表?
正确实现批量数据表透视的T-SQL写法
你当前PIVOT查询只返回1行结果的核心原因是:子查询中没有提供行组标识,聚合函数会合并所有同given_id的记录,无法拆分出你需要的多组行结果。
你需要先给属于同一行组的记录添加统一的分组编号,再进行透视,参考代码如下:
SELECT [1], [2], [3] FROM ( SELECT given_id, data, -- 给同一个given_id下的记录按顺序编号,同组记录编号一致 -- 若有实际排序逻辑可将ORDER BY后的内容替换为对应排序字段 ROW_NUMBER() OVER (PARTITION BY given_id ORDER BY (SELECT 0)) AS group_rn FROM example_table ) d PIVOT ( MIN(data) -- 注意原代码这里漏了空格,需要加在given_id和in之间 FOR given_id IN ([1], [2], [3]) ) piv;
代码逻辑说明
- 内层查询新增的
group_rn字段会给属于同一行组的记录分配相同的编号:第一组example_val1_*的group_rn均为1,第二组example_val2_*的group_rn均为2 - PIVOT操作会自动将未出现在聚合函数、
FOR子句中的group_rn作为分组依据,最终每个分组对应一行透视结果 - 第二组没有
given_id=3的记录,对应位置自动返回NULL,完全匹配你期望的输出效果
内容的提问来源于stack exchange,提问作者LLawsford
相关产品推荐
相关产品推荐

