2017-02-14 2 views
0

Я хотел бы добавить недостающие элементы последовательности в временной таблицеSQL Server создает недостающие записи

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

Вы хотите вставить отсутствующие данные в таблицу. Или вы просто хотите показать их в самом выходе. –

+0

Определите «отсутствует»! Если вы вставляете только две строки, ничего не пропадает, если возвращаются только две строки. – Tyron78

ответ

0

Вы можете создать рекурсивный КТР, используя свои начальные строки в качестве точки привязки и вычитания 1 из последовательности на каждую рекурсии, пока значение не 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

Спасибо Таннер, который очень помогает –

Смежные вопросы