Несоответствие результатов работы UNION и IN - PullRequest
0 голосов
/ 06 марта 2020

- Этот запрос для извлечения данных за текущий и предыдущий месяц по условию ниже

SELECT 

 COL1 ||''||
 COL2 ||''||
 COL2 ||''||

FROM TB1 , TB2 , TB3

WHERE TB1.TRAN_YEAR=2020   AND TB1.PERIOD=(3,2) 
AND TB2.TRAN_YEAR=2020     AND TB2.PERIOD= (3,2)

- Этот запрос для извлечения данных за текущий и предыдущий месяц по UNION

SELECT 

 COL1 ||''||
 COL2 ||''||
 COL2 ||''||

FROM TB1 , TB2 , TB3

WHERE TB1.TRAN_YEAR=2020   AND TB1.PERIOD=(3) 
AND TB2.TRAN_YEAR=2020     AND TB2.PERIOD= (3)

UNION

SELECT 

 COL1 ||''||
 COL2 ||''||
 COL2 ||''||

FROM TB1 , TB2 , TB3

WHERE TB1.TRAN_YEAR=2020   AND TB1.PERIOD=(2) 
AND TB2.TRAN_YEAR=2020     AND TB2.PERIOD= (2)

Результат есть несоответствие set, дайте мне знать, что нужно изменить в первом запросе, чтобы сделать то же количество записей. Нужно придумать новый запрос, чтобы получить данные за 12 месяцев, и странно добавить UNION за 12 месяцев.

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Ваш первый запрос возвращает данные для TB1.PERIOD = 3 и TB2.PERIOD = 2 или TB1.PERIOD = 2 и TB2.PERIOD = 3 - это несоответствие. Попробуйте это:

WHERE 
    TB1.TRAN_YEAR=2020 AND TB2.TRAN_YEAR=2020 
    AND ((TB1.PERIOD=3 AND TB2.PERIOD=3) OR (TB1.PERIOD=2 AND TB2.PERIOD=2))

или более уточнить:

WHERE 
    TB1.TRAN_YEAR=2020 AND TB2.TRAN_YEAR=2020 
    AND TB1.PERIOD=TB2.PERIOD and TB1.PERIOD in (2, 3)
0 голосов
/ 06 марта 2020

Вам нужно объединить результаты за ваши периоды.

SELECT 

 COL1 ||''||
 COL2 ||''||
 COL2 ||''||

FROM TB1 , TB2 , TB3

WHERE TB1.TRAN_YEAR=2020   AND TB1.PERIOD in (3,2) -- use in to check, that value is in list
AND TB2.TRAN_YEAR=2020
AND (TB1.PERIOD is null or TB2.PERIOD is null or TB1.PERIOD = TB2.PERIOD)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...