如何用T-SQL PIVOT将多行记录转单行并获取对应日期
解决PIVOT转换时同时获取字符值与对应日期的问题
你当前的PIVOT查询仅对ADHOC_CHAR_VAL字段做了聚合,没有处理EFF_DATE,因此无法得到CHAR_TYPE为'E'和'CO'对应的日期值。要实现同时获取各类字符值及对应日期的需求,需要在PIVOT中同时对两个字段进行聚合操作。
修改后的查询代码
SELECT ACCT, C_val AS C, M_val AS M, E_val AS E, CO_val AS CO, E_date AS E_DATE, CO_date AS CO_DATE FROM ( SELECT ACCT, CHAR_TYPE, ADHOC_CHAR_VAL, EFF_DATE FROM ACCT ) PIVOT ( MIN(ADHOC_CHAR_VAL) AS val, MAX(EFF_DATE) AS date FOR CHAR_TYPE IN ('C' AS C, 'M' AS M, 'E' AS E, 'CO' AS CO) ) WHERE (C_val IS NOT NULL OR M_val IS NOT NULL OR E_val IS NOT NULL OR CO_val IS NOT NULL)
代码说明
- 在PIVOT子句中同时定义两个聚合逻辑:用
MIN(ADHOC_CHAR_VAL)获取各CHAR_TYPE对应的字符值,用MAX(EFF_DATE)获取对应日期(若同ACCT同CHAR_TYPE有多条日期记录,MAX取最新值,可根据业务需求替换为MIN) - 通过
AS val和AS date为每个CHAR_TYPE的聚合结果添加后缀,避免字段名冲突 - 最终结果中,
E_date和CO_date分别对应CHAR_TYPE为'E'和'CO'的日期值,同时保留原有的C、M、E、CO字符值列
内容的提问来源于stack exchange,提问作者shazufaraz
相关产品推荐
相关产品推荐

