如何实现多行非数值型数据的SQL Pivot透视,使单日多记录分行?
解决SQL透视(Pivot)保留单日多行记录的问题
要实现单日多条记录单独占一行的透视效果,核心是给同一员工同一日期下的每条记录添加唯一行标识,避免原语句中max(Amount)合并同天记录的问题。以下是调整后的完整查询:
WITH NumberedRecords AS ( SELECT 员工, 日期, 金额, -- 给每个员工+日期分组内的记录编行号,区分同天的不同条目 ROW_NUMBER() OVER (PARTITION BY 员工, 日期 ORDER BY 金额) AS RowNum FROM 你的表名 ) SELECT 员工, [01/01/2023], [02/01/2023], [03/01/2023] FROM NumberedRecords PIVOT ( MAX(金额) FOR 日期 IN ([01/01/2023], [02/01/2023], [03/01/2023]) ) AS PivotResult ORDER BY 员工, RowNum;
关键调整说明:
- 添加行号(RowNum):通过
ROW_NUMBER() OVER (PARTITION BY 员工, 日期 ORDER BY 金额),给每个员工每天的记录分配唯一序号,确保同天的多条记录被视为独立分组依据。 - 透视逻辑优化:透视时,
员工+RowNum的组合会作为隐式分组键,这样同员工不同RowNum的记录会生成单独的行,避免原语句中max(Amount)合并同天数据的问题。 - 动态日期扩展(可选):如果日期范围不固定,可以用动态SQL生成
FOR 日期 IN (...)中的日期列表,避免硬编码固定日期。
内容的提问来源于stack exchange,提问作者Lavie
相关产品推荐
相关产品推荐

