Вернуть результаты, которые не совпадают в соединении SQL Server - PullRequest
0 голосов
/ 04 мая 2018

См. Это http://sqlfiddle.com/#!18/8fe2a/13

У меня есть таблицы

CREATE TABLE Figure(
MonthNumber varchar(10),
Code varchar(10),
Figure int
);

INSERT INTO Figure (MonthNumber, Code, Figure)
VALUES ('5', 'S', '25'),
('5','G', '30');

CREATE TABLE Other(
MonthNumber varchar(10),
Code varchar(10),
Figure int
);

INSERT INTO Other (MonthNumber, Code, Figure)
VALUES ('5', 'S', '25'),
('5','G', '30'),
('4','K', '40'),
('3','D', '20'),
('2','J', '25');

Запрос:

SELECT * FROM
Figure f1
RIGHT JOIN 
Other O
ON F1.[Code] = O.[Code]
OR 
o.[MonthNumber] = MONTH(GETDATE())-1
WHERE f1.[MonthNumber] = MONTH(GETDATE())

Результат:

| MonthNumber | Code | Figure | MonthNumber | Code | Figure |
|-------------|------|--------|-------------|------|--------|
|           5 |    S |     25 |           5 |    S |     25 |
|           5 |    S |     25 |           4 |    K |     40 |
|           5 |    G |     30 |           5 |    G |     30 |
|           5 |    G |     30 |           4 |    K |     40 |

Тем не менее, я ищу результаты этого месяца, но также включаю людей, у которых, возможно, была цифра за предыдущие месяцы, но не за этот месяц.

Желаемый результат:

| MonthNumber | Code | Figure |
|-------------|------|--------|
|           5 |    S |     25 |
|           5 |    G |     25 |
|           5 |    K |      0 |
|           5 |    D |      0 |
|           5 |    J |      0 |

Я не могу понять, что мне нужно в соединении. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вы, кажется, хотите логику, как это:

SELECT MONTH(GETDATE()) as MonthNumber, 
       MONTH(GETDATE()) as Code,
       f.Figure
FROM (SELECT DISTINCT code FROM Other) c LEFT JOIN
     Other o 
     ON c.Code = o.Code LEFT JOIN
     Figure f
     ON f.[Code] = c.[Code] AND
        f.[MonthNumber] = MONTH(GETDATE())
ORDER BY figure desc;

Здесь - SQL-скрипка. Я не стал вставлять COALESCE() для Figure. NULL кажется подходящим возвращаемым значением.

0 голосов
/ 04 мая 2018

Попробуйте

SELECT 
    O.* 
FROM
    Figure f1
RIGHT JOIN 
    Other O
ON 
    F1.[Code] = O.[Code]
AND 
    (
        f1.[MonthNumber] = MONTH(GETDATE())
    OR 
        (
            o.[MonthNumber] = MONTH(GETDATE())-1
        AND 
            f1.[MonthNumber] != MONTH(GETDATE())
        )
    )

Демо

http://sqlfiddle.com/#!18/8fe2a/44

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