Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Добавление строк в разные группы товаров  [new]
Olips777
Member

Откуда:
Сообщений: 2
есть таблица продаж
в ней сгруппировал все продажи товаров за предыдущие 5 недель, нужно добавить строки с неделями где продаж не было
есть мысль использовать оконные функции, но с реализацией пока мыслей нет

пример:
товар неделя колво
a 1 10
a 2 15
a 4 20
a 5 10
b 1 5
b 4 25
b 5 30

нужно получить:
a 1 10
a 2 15
a 3 0
a 4 20
a 5 10
b 1 5
b 2 0
b 3 0
b 4 25
b 5 30

всем спасибо за ответы!
17 дек 19, 17:10    [22042363]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в разные группы товаров  [new]
iiyama
Member

Откуда:
Сообщений: 642
Olips777,
Вам нужна таблица-календарь.
17 дек 19, 17:20    [22042379]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в разные группы товаров  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
iiyama
Olips777,
Вам нужна таблица-календарь.

ну или хотя бы таблица с целыми числами
17 дек 19, 17:42    [22042413]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в разные группы товаров  [new]
Olips777
Member

Откуда:
Сообщений: 2
iiyama,

соединить с первой таблицей и затем со второй ?
Тогда по какому предикату?
17 дек 19, 18:01    [22042438]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в разные группы товаров  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Olips777,

DECLARE @t AS TABLE
                    ([товар]  CHAR(1) NOT NULL
                   , [неделя] TINYINT NOT NULL
                   , [колво]  INT NOT NULL
                   , PRIMARY KEY CLUSTERED([товар], [неделя])
                    );

INSERT INTO @t(
       [товар]
     , [неделя]
     , [колво]
              )
SELECT 'a',  1,  10 UNION ALL 
SELECT 'a',  2,  15 UNION ALL 
SELECT 'a',  4,  20 UNION ALL 
SELECT 'a',  5,  10 UNION ALL 
SELECT 'b',  1,  5  UNION ALL 
SELECT 'b',  4,  25 UNION ALL 
SELECT 'b',  5,  30;

WITH weeks
     AS (
     SELECT 
            [товар]
          , 1 AS             [неделя]
          , MAX([неделя]) AS aw
     FROM 
          @t
     GROUP BY 
              [товар]
     UNION ALL
     SELECT 
            [товар]
          , [неделя] + 1
          , aw
     FROM 
          weeks
     WHERE [неделя] < aw)
     SELECT 
            ISNULL(t.[товар], w.[товар]) AS   [товар]
          , ISNULL(t.[неделя], w.[неделя]) AS [неделя]
          , ISNULL(t.[колво], 0) AS           [колво]
     FROM 
          @t AS t
          FULL JOIN weeks AS w ON w.[товар] = t.[товар]
                                  AND w.[неделя] = t.[неделя]
            ORDER BY 
                     [товар]
                   , [неделя] OPTION(
                                     MAXRECURSION 0);
24 дек 19, 14:12    [22047759]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в разные группы товаров  [new]
L_argo
Member

Откуда:
Сообщений: 1183
iiyama
Olips777,
Вам нужна таблица-календарь.
+1. Остальное чушь. :)
24 дек 19, 14:29    [22047783]     Ответить | Цитировать Сообщить модератору
 Re: Добавление строк в разные группы товаров  [new]
entrypoint
Member

Откуда:
Сообщений: 227
L_argo,

В задаче относительный номер недели, а не календарный. Что будете городить ? )))

автор
все продажи товаров за предыдущие 5 недель
24 дек 19, 15:05    [22047809]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить