27,579
社区成员
发帖
与我相关
我的任务
分享
;WITH CTE AS(
SELECT 客户列,月份列
,ROW_NUMBER()OVER(PARTITION BY 客户列 ORDER BY 月份列)RN
,DATEDIFF(MONTH,'1900-01-01',月份列+'-01')RN2
FROM A
)
,CTE2 AS(
SELECT 客户列
,CASE WHEN MIN(月份列)=MAX(月份列)THEN MAX(月份列)ELSE MIN(月份列)+'至'+MAX(月份列)END[月份]
FROM CTE
GROUP BY 客户列,RN-RN2
)
,CTE3 AS(
SELECT 客户列 FROM A GROUP BY 客户列
)
SELECT 客户列
,STUFF((
SELECT ';'+月份 FROM CTE2 T2
WHERE T1.客户列=T2.客户列
ORDER BY 月份
FOR XML PATH('')
)
,1,1,'')AS[月份]
FROM CTE3 T1
SQL2005+有效