27,580
社区成员
发帖
与我相关
我的任务
分享
;WITH CTE AS
(
SELECT 1 AS iBillRegisteridid,2 AS cstartbillcode, 10 AS cendbillcode
UNION ALL
SELECT 2,5,8
UNION ALL
SELECT 3,10,10
)
SELECT a.*,
a.cendbillcode-b.row AS cbillcode
FROM CTE a
INNER JOIN (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS row FROM sys.objects ) b ON b.row <= a.cendbillcode - cstartbillcode
WHERE cstartbillcode <> cendbillcode
ORDER BY a.iBillRegisteridid
/*
表数据
iBillRegisteridid cstartbillcode cendbillcode
1 2 10
2 5 8
3 10 10
结果
iBillRegisteridid cendbillcode cbillcode
1 10 9
1 10 8
1 10 7
1 10 6
1 10 5
1 10 4
1 10 3
1 10 2
2 8 7
2 8 6
2 8 5
*/WITH a AS ( SELECT 2 AS ib , 537137501 AS cstart , 537138000 AS cend UNION ALL
SELECT 3 AS ib , 537138001 AS cstart , 537138500 AS cend) ,
b AS (SELECT number FROM MASTER.dbo.spt_values WHERE TYPE = 'P' )
SELECT cstart + number ,* FROM a CROSS JOIN b WHERE a.cend - cstart >= b.number
结果就不贴了,太长