日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql从某不连续的数字中将其分段并找出缺失的数字并分段

發布時間:2024/9/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql从某不连续的数字中将其分段并找出缺失的数字并分段 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 首先做準備數據
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 #tempSortfrom (select Row_Number() OVER (ORDER BY name,colValue) as rownum,colValue ,namefrom #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.deltaORDER 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

?

  • 使用ForXml將其分組合并成一行
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 strCardFROM #tempContinuity AS vGROUP BY v.name

轉載于:https://www.cnblogs.com/mingxh/p/4800001.html

總結

以上是生活随笔為你收集整理的sql从某不连续的数字中将其分段并找出缺失的数字并分段的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。