标签:
1 CREATE TABLE #tempsource(col NVARCHAR(100)) 2 3 INSERT INTO #tempsource (col) VALUES(‘20140100001‘) 4 INSERT INTO #tempsource (col) VALUES(‘20140100002‘) 5 INSERT INTO #tempsource (col) VALUES(‘20140100003‘) 6 INSERT INTO #tempsource (col) VALUES(‘20140100004‘) 7 INSERT INTO #tempsource (col) VALUES(‘20140100007‘) 8 INSERT INTO #tempsource (col) VALUES(‘20140100008‘) 9 INSERT INTO #tempsource (col) VALUES(‘201401000010‘) 10 INSERT INTO #tempsource (col) VALUES(‘201401000011‘) 11 INSERT INTO #tempsource (col) VALUES(‘20140200001‘) 12 INSERT INTO #tempsource (col) VALUES(‘20140200002‘) 13 INSERT INTO #tempsource (col) VALUES(‘20140200003‘) 14 INSERT INTO #tempsource (col) VALUES(‘20140200004‘) 15 INSERT INTO #tempsource (col) VALUES(‘20140200007‘) 16 INSERT INTO #tempsource (col) VALUES(‘20140200009‘) 17 INSERT INTO #tempsource (col) VALUES(‘20140200010‘) 18 INSERT INTO #tempsource (col) VALUES(‘20140200011‘)
CREATE TABLE #temp(name NVARCHAR(50),colValue INT ) INSERT INTO #temp SELECT LEFT(col,6) AS name ,SUBSTRING(col,7,LEN(col)) FROM #tempsource
select v1.colValue, (v1.colValue - v1.rownum) as delta ,v1.name INTO #tempSort from ( select Row_Number() OVER (ORDER BY name,colValue) as rownum,colValue ,name from #temp ) v1
SELECT v2.name,delta,MIN(v2.colValue) as StartNum, max(v2.colValue) as EndNum, max(v2.colValue)-min(v2.colValue)+1 as Count,ROW_NUMBER() OVER( ORDER BY v2.delta ASC ) AS rownum INTO #tempContinuity from #tempSort v2 --WHERE v2.colValue >=2 group by v2.name,v2.delta ORDER BY StartNum
SELECT tlx1.name,tlx1.EndNum+1 LostStartNum,tlx2.StartNum-1 AS LostEndNum,tlx2.StartNum-1 -(tlx1.EndNum+1)+1 LostCount INTO #tempLost FROM #tempContinuity AS tlx1 LEFT JOIN #tempContinuity AS tlx2 ON tlx1.rownum+1 = tlx2.rownum AND tlx2.name = tlx1.name WHERE tlx2.StartNum IS NOT NULL ORDER BY tlx1.delta
SELECT name +RIGHT(‘0000000‘+ CAST(StartNum AS NVARCHAR),5) AS StartNum ,name +RIGHT(‘0000000‘+ CAST(EndNum AS NVARCHAR),5) AS EndNum,Count FROM #tempContinuity SELECT name +RIGHT(‘0000000‘+ CAST(LostStartNum AS NVARCHAR),5) AS LostStartNum ,name +RIGHT(‘0000000‘+ CAST(LostEndNum AS NVARCHAR),5) AS LostEndNum,LostCount FROM #tempLost
SELECT name,STUFF((SELECT name +RIGHT(‘0000000‘+ CAST(StartNum AS NVARCHAR),5) +‘-‘+name +RIGHT(‘0000000‘+ CAST(EndNum AS NVARCHAR),5)+‘|‘+CAST(t.Count AS NVARCHAR) +‘;‘ FROM #tempContinuity AS t WHERE t.name =v.name FOR XML PATH (‘‘)),1,0,‘‘) AS strCard FROM #tempContinuity AS v GROUP BY v.name
标签:
原文地址:http://www.cnblogs.com/mingxh/p/4800001.html