SQL 按表中的一个int值拆分成对应的个数的记录条数

IF OBJECT_ID(N'tempdb..#tmp') IS NOT NULL

    DROP TABLE #tmp

   

CREATE TABLE #tmp ( aaa VARCHAR(10), bbb INT )

INSERT  INTO #tmp

        ( aaa, bbb )

VALUES  ( '11111', 5 )

INSERT  INTO #tmp

        ( aaa, bbb )

VALUES  ( '22222', 3 )

INSERT  INTO #tmp

        ( aaa, bbb )

VALUES  ( '33333', 2 )

INSERT  INTO #tmp

        ( aaa, bbb )

VALUES  ( '44444', 1 )

INSERT  INTO #tmp

        ( aaa, bbb )

VALUES  ( '55555', 3 )

--SELECT * FROM #tmp

;WITH    Digits

          AS ( SELECT   0 AS Number

UNION SELECT 1

UNION SELECT 2

UNION SELECT 3

UNION SELECT 4

UNION SELECT 5

UNION SELECT 6

UNION SELECT 7

UNION SELECT 8

UNION SELECT 9

             )

    SELECT  b.aaa ,

            b.bbb ,

            T.number

    FROM    #tmp b

            JOIN ( SELECT   ( d5.Number * 100000 ) + ( d4.Number * 10000 )

                            + ( d3.Number * 1000 ) + ( d2.Number * 100 )

                            + ( d1.Number * 10 ) + d0.Number AS Number

                   FROM     Digits AS d0 ,

                            Digits AS d1 ,

                            Digits AS d2 ,

                            Digits AS d3 ,

                            Digits AS d4 ,

                            Digits AS d5

                 ) t ON 1 = 1

    WHERE  t.number <= b.bbb

    ORDER BY b.aaa ,

            b.bbb ,

            t.Number

原文地址:https://www.cnblogs.com/anranstl/p/5241275.html