将一条记录拆分为多行
问题描述:
有人可以帮我将记录拆分成多行。将一条记录拆分为多行
我的记录是这样的
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
答
你可以尝试这样的事情。请注意,此查询假定为maximum value of your 4th Column is 10
。如果您有更高的值,您可以添加more rows to the CTE using a cross join
。
;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
Demo (based on previuos reply data)
*编辑: “行” 的心不是
RDBMS什么您使用的是一个好名字的桌子吗? – Taryn
哪个SQL供应商/版本?这种“倒置”的分组计数是......并不那么简单或通用。 – user2864740
如果您可以使用ID生成器表“加入”,则可以乘以该表。我的意思是从1开始增加1到最大需要的数字。而不是简单的连接,你可以添加一个generator_table.id