Создать таблицу SQL на основе дат - PullRequest
0 голосов
/ 01 апреля 2020

Я ищу скрипт для создания новой таблицы на основе другой.

Входная таблица: Input table:

Таблица вывода: Output table: Оригинал был построен в QlikView, но теперь я должен преобразовать его в SQL

1 Ответ

0 голосов
/ 01 апреля 2020

Ваш вопрос не кристально ясен, но я сделаю снимок того, что, я думаю, вы хотите. Это отличный сценарий использования календаря! Я сократил таблицу календаря здесь и использовал дату в американском стиле, но вы поняли идею. Кроме того, в вашем примере, я думаю, вы добавили постороннюю строку в результаты. Вероятно, не должно быть строки с 1-4-2020 XB 2.

DECLARE @cal TABLE
(
    dt DATE
);

INSERT  @cal
(
    dt
)
VALUES
('04-01-2020'),('04-02-2020'),('04-03-2020'),('04-04-2020'),
('04-05-2020'),('04-06-2020'),('04-07-2020'),('04-08-2020'),
('04-09-2020'),('04-10-2020'),('04-11-2020'),('04-12-2020'),
('04-13-2020'),('04-14-2020'),('04-16-2020'),('04-17-2020'),
('04-18-2020'),('04-19-2020'),('04-20-2020'),('04-21-2020'),
('04-22-2020'),('04-23-2020'),('04-24-2020'),('04-25-2020'),
('04-26-2020'),('04-27-2020'),('04-28-2020'),('04-29-2020'),
('04-30-2020');

DECLARE @Input TABLE
(
    ProjectID CHAR(1),
    Item CHAR(1),
    Quantity INT,
    Startdate DATE,
    EndDate DATE
);

INSERT  @Input
(
    ProjectID,
    Item,
    Quantity,
    Startdate,
    EndDate
)
VALUES
(   'X',
    'A',
    1,
    '04-01-2020',
    '04-05-2020'),
(   'Y',
    'A',
    2,
    '04-01-2020',
    '04-06-2020'),
(   'X',
    'B',
    2,
    '04-02-2020',
    '04-05-2020');

/* Join to the calendar table. */

SELECT  c.dt,
        i.ProjectID,
        i.Item,
        i.Quantity
FROM    @Input AS i
JOIN    @cal   AS c
  ON    c.dt
        BETWEEN i.startdate AND i.EndDate
        ORDER BY i.ProjectID, i.Item, c.dt
...