连续月份的连接问题100分

zhaoanle 2015-03-20 09:09:14
A表,有 月份列,客户列
数据有
张三 2013-01
张三 2013-02
张三 2013-03
张三 2014-11
张三 2014-12
张三 2015-01
张三 2015-03
李四 2012-05
李四 2012-06
李四 2014-10
李四 2014-11
李四 2014-12
李四 2015-01
。。。

求结果 为2列:
张三 2013-01至2013-03;2014-11至2015-01;2015-03
李四 2012-05至2012-06;2014-10至2015-01;
就是说把数据库表中同一客户的月份列,相连月份用“至”连起来,显示为一个字段。 如果其中有断的月份,则要分开,用;连起来
因数据量很大,需要考虑性能,游标会比较慢,求其他更好的解决办法?

...全文
67 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoanle 2015-03-20
  • 打赏
  • 举报
回复
感谢!专业啊
还在加载中灬 2015-03-20
  • 打赏
  • 举报
回复
;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+有效

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧