Полная внешняя группа SQL Server не получает все значения - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь полностью объединить две таблицы по их дате, в одной из которых есть столбцы с именами «date», «party», «total» и т. Д., А в другой таблице просто указаны даты.

Ниже приведен запросУ меня есть:

SELECT 
    rangeDates.[ListOFDates], 
    partiesDetails.[Party], partiesDetails.[Amount] 
FROM rangeDates
       FULL OUTER JOIN partiesDetails
        ON rangeDates.[ListOFDates] = partiesDetails.[Date]

Теперь у меня есть таблица rangeDates.Также есть дата на каждый день для установленного периода дат, например, ниже она начинается с '2017-02-02' и может иметь дату каждый день до '2018-03-01'

Ref      ListOFDates
1        2017-02-02
2        2017-02-03
3        2017-02-04
.........

И в таблице partiesDetails

Date          Party      Amount
2017-02-03     Tuf        5000 
2017-04-01     Tuf        2000
2017-05-22     Wing       3000
.................

Идеальный результат, который я хотел бы получить:

ListOfDates   Party     Amount
2017-02-02     NULL      NULL
2017-02-03     Tuf       5000
2017-02-04     NULL      NULL
............

1 Ответ

1 голос
/ 14 мая 2019

Я чувствую, что, возможно, вам следует использовать таблицу календаря здесь:

WITH dates AS (
    SELECT CAST('20170202' AS date) AS [date]
    UNION ALL
    SELECT DATEADD(dd, 1, [date])
    FROM dates
    WHERE DATEADD(dd, 1, [date]) <= '2018-03-01'
)

SELECT
    d.date,
    p.[Party],
    p.[Amount]
FROM dates d
LEFT JOIN partiesDetails p
    ON d.date = p.[Date]
ORDER BY
    d.date;

Я предлагаю это, потому что вы использовали язык and may have a date everyday till, что, по-видимому, подразумевает, что, возможно, таблица rangeDates на самом деле не охватывает весь диапазон дат, который вы имеете в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...