簡體   English   中英

將標題行擴展為多個子行

[英]Expand header row into multiple child rows

在我的SQL數據庫中,我有一個表,代表票證書[Books],其中一本書中票證的數量可以變化。

這由兩列[Books].[StartNo][Books].[BookSize]

我需要實現的是一條select語句,該語句針對該書中的每張票重復表[Books]的每一行,並附加一個計算列來顯示該行的票號。

所以從

--------+---------+----------
Book    | StartNo | BookSize 
--------+---------+----------
Book 1  |   1     |    3     
Book 2  |   4     |    4    
Book 3  |  19     |    4     

像這樣

--------+---------+----------+----------
Book    | StartNo | BookSize | TicketNo
--------+---------+----------+----------
Book 1  |   1     |    3     |    1
Book 1  |   1     |    3     |    2
Book 1  |   1     |    3     |    3
Book 2  |   4     |    4     |    4
Book 2  |   4     |    4     |    5
Book 2  |   4     |    4     |    6
Book 2  |   4     |    4     |    7
Book 3  |  19     |    4     |   19
Book 3  |  19     |    4     |   20
Book 3  |  19     |    4     |   21
Book 3  |  19     |    4     |   22

我只是不太確定從哪里開始。

嘗試這個:

;WITH Counts AS (
    SELECT Max(StartNo + BookSize) AS TotalBookSize
    FROM t
), CTE(Tickets) AS (
    SELECT 1
    UNION ALL
    SELECT Tickets + 1
    FROM CTE
    WHERE Tickets < (SELECT TotalBookSize FROM Counts)
)
SELECT *
FROM t JOIN CTE ON CTE.Tickets BETWEEN t.StartNo AND t.StartNo + t.BookSize - 1

使用理tally table

WITH lv0 AS (SELECT 0 g UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0)
    ,lv1 AS (SELECT 0 g FROM lv0 a CROSS JOIN lv0 b) --10 * 10 =  100
    ,lv2 AS (SELECT 0 g FROM lv1 a CROSS JOIN lv0 b) --100 * 10 = 1000
    ,Tally (num) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM lv2)
    SELECT (num+StartNo-1) as TicketNo, *
    FROM   Tally
           CROSS JOIN Yourtable
    WHERE  num <= booksize
    ORDER  BY book 

您需要一個數字列表並將其與books表一起使用

select b.*, number
from Books b
join master.dbo.spt_values v on v.number between b.StartNo AND b.StartNo+b.BookSize-1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM