Sql 将一条记录拆分为多行

Sql 将一条记录拆分为多行,sql,Sql,有人能帮我把记录分成多行吗 我的记录是这样的 321517 2013 SEPTEMBER 3 30 286787 321517-2013 321517 2013 SEPTEMBER 2 42 286787 321517-2013 321517 2013 SEPTEMBER 1 30 286787 321517-2013 321517 2013 SEPTEMBER 1 30 286787 321517-2013 32

有人能帮我把记录分成多行吗

我的记录是这样的

321517  2013    SEPTEMBER   3   30  286787  321517-2013
321517  2013    SEPTEMBER   2   42  286787  321517-2013
321517  2013    SEPTEMBER   1   30  286787  321517-2013
321517  2013    SEPTEMBER   1   30  286787  321517-2013
321517  2013    SEPTEMBER   1   30  286787  321517-2013
321517  2013    SEPTEMBER   1   42  286787  321517-2013
321517  2013    SEPTEMBER   1   42  286787  321517-2013
我希望他们看起来像这样

321517  2013    SEPTEMBER   3   30  286787  321517-2013
321517  2013    SEPTEMBER   2   42  286787  321517-2013
321517  2013    SEPTEMBER   1   30  286787  321517-2013
321517  2013    SEPTEMBER   1   30  286787  321517-2013
321517  2013    SEPTEMBER   1   30  286787  321517-2013
321517  2013    SEPTEMBER   1   42  286787  321517-2013
321517  2013    SEPTEMBER   1   42  286787  321517-2013

你可以试试这样的。请注意,此查询假定第4列的最大值为10。如果值较高,可以使用交叉联接将更多行添加到CTE

;WITH CTE AS (
  select Digit 
  from ( values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS t(Digit)
)
select C1, C2, C3, 1 C4, C5, C6, C7
from Table1 join CTE on C4 > Digit
order by C1

您可以获得最大可能值,然后进行递归CTE以生成行

;WITH MAX_VALUE AS (
   SELECT MAX(C4) AS VAL FROM Table1
),
TMP_ROWS AS (
    SELECT 1 AS PARENT, 0 AS LVL, 1 AS ID

    UNION ALL

    SELECT 
        CHILD.PARENT,
        TMP_ROWS.LVL + 1 AS LVL,
        TMP_ROWS.ID
    FROM (SELECT 1 AS PARENT, 1 AS ID, 0 AS NIVEL) AS CHILD
        INNER JOIN TMP_ROWS ON CHILD.PARENT = TMP_ROWS.ID
    WHERE TMP_ROWS.LVL < (SELECT VAL FROM MAX_VALUE)
)
select C1, C2, C3, 1 C4, C5, C6, C7
from Table1 join TMP_ROWS on C4 > TMP_ROWS.LVL
order by C1, C2, C3, C5, C6, C7

*编辑:行不是表的好名称

您使用的是什么RDBMS?哪个SQL供应商/版本?按计数对组的这种反转是。。不是那么简单或通用。如果可以与id生成器表联接,则可以将该表相乘。我的意思是有ID,从1开始,递增1,直到达到所需的最大值。您可以添加一个generator_表,而不是简单的联接。id@LittleBobbyTables错别字,我不是有意加上那个标签的。