2015-07-13 3 views
1

Я хотел бы присоединиться к двум таблицам, используя левое соединение, но результат не то, что я ожидаю.SQL-таблица join with coalesce

is_selected не работает. Появляется сообщение EMP_ID 004.

Я не знаю, что не так с моим запросом, не могли бы вы помочь?

SELECT DISTINCT a.Type, 
COALESCE(a.EMP_ID, b.EMP_ID) AS ID, 
    a.Deduction_No, 
    a.Home_Amt, 
    a.Deduction_Amt, 
    a.Group_ID, 
    b.Is_Selected 
    From Table a 
LEFT JOIN TABLE b(a.Deduction_No = b.Deduction_No) 
WHERE Is_Selected = 'Y' 

Таблица A

Deduction_No Type GROUP_ID EMP_ID  Service_code AMT 
V1001   EMP     001  D1008   10  
V1001   GRP  G185  NULL  C1009   20   
V1001   GRP  G185  NULL  C1009   35   
V1001   GRP  G185  NULL  C1009   20    

Таблица б

Deduction_No GROUP_ID EMP_ID  Is_Selected AMT 
V1001   G185  001    Y  20 
V1001   G185  001    N   0 
V1001   G185  002    Y  35 
V1001   G185  002    N  0 
V1001   G185  003    Y  20  
V1001   G185  003    N  0 
V1001   G185  004    Y  20 
V1001   G185  004    N  20 

Выход с ошибкой

Deduction_No Type GROUP_ID EMP_ID  Service_code AMT Is_Selected 
V1001   EMP     001  D1008   10   Y 
V1001   GRP  G185  001  C1009   20   Y 
V1001   GRP  G185  002  C1009   35   Y 
V1001   GRP  G185  003  C1009   20   Y            
V1001   GRP  G185  004  C1009   95   Y 

требуемый выход

Deduction_No Type GROUP_ID EMP_ID  Service_code AMT Is_Selected 
V1001   EMP     001  D1008   10   Y 
V1001   GRP  G185  001  C1009   20   Y 
V1001   GRP  G185  002  C1009   35   Y 
V1001   GRP  G185  003  C1009   20   Y            

Спасибо

+0

Параметр 'столбца AMT' в проблемном выходе имеет' 85' значения, которое не кажется соответствует любой из ваших данных образца. Возможно ли, что у вас есть другая строка с 'IS_SELECTED = 'Y'' и Deduction_No =' V1001 '? –

ответ

0

Пожалуйста, вы можете проверить это, если он работает:

     SELECT DISTINCT a.Type_cd, 
         COALESCE (a.EMP_ID,b.EMP_ID) AS ID, 
         a.Deduction_No, 
         a.Group_ID, 
         a.Service_code, 
         b.Is_Selected, 
         SUM(a.AMT) 
         FROM supplier_app.a a 
         RIGHT OUTER JOIN (Select Deduction_No,GROUP_ID,EMP_ID,Is_Selected FROM supplier_app.b WHERE Is_Selected ='Y' GROUP BY Deduction_No,GROUP_ID,EMP_ID,Is_Selected) b ON (a.Deduction_No = b.Deduction_No) 
         Group by  a.Type_cd,ID, 
         a.Deduction_No, 
         a.Group_ID, 
         a.Service_code, 
         b.Is_Selected; 

Вот ответ:

      Type     ID   Deduction_No GROUP_ID Service_code delete_ind  Sum(AMT) 
         -------------------- ---------- ------------ ---------- ------------ ---------- ----------- 
         EMP     001   V1001   ?   D1008   Y     40 
         GRP     001   V1001   G185  C1009   Y     75 
         GRP     002   V1001   G185  C1009   Y     75 
         GRP     003   V1001   G185  C1009   Y     75 
         GRP     004   V1001   G185  C1009   Y     75 
+0

Выход аналогичен предыдущему. – user3559600

+0

В таблице B есть запись с is_selected = 'Y' через EMP_ID = 004. Следовательно, она войдет в соединение. Пожалуйста, поправьте меня, если я ошибаюсь. @ user3559600 –

+0

Я отредактировал свой ответ. Вы упомянули ниже, что хотите объединить результаты, я предположил, что вы хотите сделать сумму на суммы. Просьба проверить, работает ли он нормально. @ user3559600 –

0

Я думаю, что ваш запрос работает правильно. Посмотрите на это SQLFiddle here, в котором показано, на основе выборочных данных, что результаты вернутся правильно.

Если вы закомментируете пункт WHERE, вы получите значения N для IS_SELECTED (очевидно).

Я думаю, что у вас есть дополнительная строка в вашей таблице B, которая соответствует условию JOIN и возвращает результат.

Вы можете проверить, если у вас есть этот дополнительный ряд, уважающий это условие, выполнив следующий запрос:

SELECT * 
FROM B 
WHERE deduction_no = 'V1001' 
    AND emp_id = '004' 
    AND IS_SELECTED = 'Y' 
+0

Я обнаружил, что каждый EMP_ID отображает «Y» и «N». Я обновлю таблицу b – user3559600

+0

@ user3559600 Итак, мой ответ помог? –

+0

теперь моя проблема состоит в том, как объединить их вместе, особенно Amt – user3559600