2017-02-14 56 views
0

我想補充的臨時表中丟失的序列項SQL服務器創建缺少的條目

Declare @tbl as table 
(
    orderid varchar(50), 
    sequence int 
) 


insert into @tbl 
select '1548756', 3 
union 
select '1878966',2 

select * from @tbl 

電流輸出:

1548756 3 
1878966 2 

我想作如下修改輸出加缺少臨時表順序:

1548756 3 
1548756 2 
1548756 1 
1878966 2 
1878966 1 

我該怎麼做?

+0

你能否正確地格式化這個問題,使它變得更具可讀性?問題陳述也不清楚你想要實現的功能。提供你已經編寫的代碼實現這個,告訴我們它在哪裏工作不正常或者你面臨什麼錯誤。 –

+0

你想插入缺少的數據到你的table.or否則你只是想顯示他們在輸出本身。 –

+0

定義「失蹤」!如果只插入2行,如果只返回2行,則不會丟失任何內容。 – Tyron78

回答

0

您可以使用初始行作爲錨定點與從序列上的每個遞歸減1創建遞歸CTE,直到值是1:

DECLARE @tbl AS TABLE 
    (
     orderid VARCHAR(50) , 
     sequence INT 
    ); 


INSERT INTO @tbl 
     SELECT '1548756' , 
       3 
     UNION 
     SELECT '1878966' , 
       2; 

SELECT * 
FROM @tbl; 
WITH cte 
      AS (SELECT orderid , 
         sequence 
       FROM  @tbl 
       UNION ALL 
       SELECT cte.orderid , 
         CASE WHEN cte.sequence > 1 THEN cte.sequence - 1 
         END AS sequence 
       FROM  cte 
         INNER JOIN @tbl t ON t.orderid = cte.orderid 
       WHERE cte.sequence > 1 
      ) 
    SELECT * 
    FROM cte 
    ORDER BY orderid , 
      sequence desc 

爲您提供:

orderid sequence 
1548756 3 
1548756 2 
1548756 1 
1878966 2 
1878966 1 
+0

謝謝坦納這是幫助很多 –