SQL запрос с полным присоединением - PullRequest
1 голос
/ 06 мая 2020

Нужна помощь, пожалуйста .. Итак, у меня есть мой sql -

*SELECT T1.T_TYPE, T1.POSTINGDIR_D, COALESCE(T2.POSTINGDIR_C, 0) AS POSTINGDIR_C
FROM
(select T_TYPE, SUM(T_AMOUNT+MISC_AMOUNT) AS POSTINGDIR_D FROM TAB1
WHERE POSTING_DIRECTION_BT='D' GROUP BY T_TYPE) T1
FULL OUTER JOIN*
(select T_TYPE, SUM(TRANSACTION_AMOUNT+TAX_AMOUNT) AS POSTINGDIR_C FROM TAB1
WHERE POSTING_DIRECTION_BT='C' GROUP BY T_TYPE) T2
ON (T1.T_TYPE=T2.T_TYPE);

, который возвращает

*

T_TYPE  POSTINGDIR_D    POSTINGDIR_C
ZD9010  -602.3          0
S_4000  23291.23        0
ZS5010  1064.87         0
S_2000  2390            0
S_1010  3714.6          133799.71
D_1010  176513.36       0
(null)  (null)          1064.87
(null)  (null)          1000
(null)  (null)          -602.3
(null)  (null)          23291

*

мне нужна помощь с отсутствующими значениями "T_TYPE" в последних 4 строках для 1-го столбца. Должно получиться вроде

*T_TYPE POSTINGDIR_D    POSTINGDIR_C
ZD9010  -602.3          0
S_4000  23291.23        0
ZS5010  1064.87         0
S_2000  2390            0
S_1010  3714.6          133799.71
D_1010  176513.36       0
xxxxx   (null)          1064.87
yyyyy   (null)          1000
zzzzz   (null)          -602.3
abcdd   (null)          23291*

помогите пожалуйста! спасибо

1 Ответ

1 голос
/ 06 мая 2020

Используйте coalesce():

SELECT COALESCE(T1.T_TYPE, T2.T_TYPE) as T_TYPE,
       T1.POSTINGDIR_D, COALESCE(T2.POSTINGDIR_C, 0) AS POSTINGDIR_C

Или упростите весь запрос:

SELECT T1.T_TYPE, 
        SUM(CASE WHEN T1.POSTING_DIRECTION_BT = 'C'
                 THEN T1.T_AMOUNT + T1.MISC_AMOUNT ELSE 0
            END) AS POSTINGDIR_C,
        SUM(CASE WHEN T1.POSTING_DIRECTION_BT = 'D'
                 THEN T1.T_AMOUNT + T1.MISC_AMOUNT ELSE 0
            END) AS POSTINGDIR_D
FROM TAB1 T1
GROUP BY T1.T_TYPE;

Гораздо проще и, вероятно, с большей производительностью.

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