码迷,mamicode.com
首页 > 数据库 > 详细

sqlserver卡号段分组

时间:2015-07-29 06:14:24      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

之前给上海一家电子商务公司做一个卖卡系统,遇到了卡号段分组的问题。刚开始没什么好的实现方法,遂在博客园求助但未果,没法自己研究sql,终于搞定。

问题描述

有个卡库存表,有个卡号字段,假设数据:16001,16002,16003,16008.16009,16010,16211,16212。注:实际的数据量会很大,卡
号会很长。 现在要这样用sql统计出来,或者用程序实现,卡段号:16001~16003 数量:3    卡段号:16008~16010 数量:3   
  卡段号:16211~16212 数量:2 

 

需求描述:

表库存表:卡名称、面额、卡号、状态等...

比如卡名称"上海珠宝卡"面额200的这个卡有很多,每个卡都有一个对应的卡号(比如557105041502662,可能也有字母在卡号的前面),这些卡可能是一批卡,面额都一样的,假设有10000张,在数据库中一个卡号就是一条记录,但是客户不想看到列表中是一张张的卡,而是用卡号段统计出来的,比如557105041502662~557105041502761数量是100张。只要是卡号数字是连续的就组成一条记录显示卡号段和数量。

实际设计:表CardStock:CardId(卡种类)、IndetailId(入库单的Id)、CardNum(卡号)...

解决的sql:

技术分享
1 select CardId,IndetailId, (case when sum(1)>1 then cast(MIN(CardNum) as varchar(32))+ ~+ cast(MAX(CardNum) as varchar(32)) else cast(MIN(CardNum) as varchar(32)) end) AS CardNumSection, sum(1) as CardCount,  from( SELECT CardId ,IndetailId ,CardNum, CardNum - ROW_NUMBER() OVER(partition by CardId ,IndetailId ORDER BY CardNum) AS grp  FROM CardStock) v
View Code

 

其中CardNumSection就是卡号段,若是一张就直接显示卡号就行,完美解决

 

sqlserver卡号段分组

标签:

原文地址:http://www.cnblogs.com/kungge/p/4684819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!