db를 시작한 지 얼마되지 않은 초짜입니다.
그래서인지 계속 방문해서 질문을 드리게 되네요.
항상 해결해주는 답변을 주셔서 감사합니다.
오늘은 mssql 쿼리문으로 mysql(mariaDB) 쿼리문으로 변경하는 데,
도저히 해결이 되지 않는 상황이라 질문을 드리게 되었습니다.
테이블 1 - testtb_ph
p_flag | l_num | p_code | flag |
O | 12345601 | P-3 | Y |
O | 12345602 | P-3 | Y |
O | 12345603 | P-3 | Y |
O | 12345603 | P-3 | Y |
O | 12345604 | P-3 | Y |
O | 12345605 | P-3 | Y |
O | 12345606 | P-3 | Y |
O | 12345606 | P-3 | Y |
O | 12345607 | P-2 | Y |
테이블 2 - testtb_pl
flag | l_num | o_code |
O | 12345601 | P0000001 |
O | 12345602 | P0000002 |
O | 12345603 | P0000003 |
O | 12345604 | P0000004 |
O | 12345605 | P0000005 |
O | 12345606 | P0000006 |
O | 12345607 | P0000007 |
테이블 3 - testtb_oe
o_code | i_code |
P0000006 | I0000001 |
P0000001 | I0000001 |
P0000002 | I0000001 |
P0000003 | I0000001 |
P0000004 | I0000001 |
P0000005 | I0000001 |
P0000007 | J0000002 |
아래 쿼리문은 mssql 입니다. SELECT ROW_NUMBER() OVER(ORDER BY B.o_code DESC) AS ROWNUM, flag, l_num, ISNULL(( SELECT COUNT(*) FROM ( SELECT MAX(FLAG) AS FLAG FROM testtb_ph WHERE l_num = A.l_num AND FLAG = 'Y' GROUP BY p_code) T) , 0) AS pf FROM testtb_pl A LEFT JOIN testtb_oe B ON A.o_code = B.o_code
이에 대한 결과는 아래와 같습니다.
ROWNUM | flag | l_num | pf |
1 | O | 12345607 | 1 |
2 | O | 12345606 | 1 |
3 | O | 12345605 | 1 |
4 | O | 12345604 | 1 |
5 | O | 12345603 | 1 |
6 | O | 12345602 | 1 |
7 | O | 12345601 | 1 |
그런데, mysql(mariaDB) 쿼리문으로 바꿔서 같은 결과를 내고 싶은데,
해결이 되지 않습니다.
어떻게 수정하면 같은 결과를 얻을 수 있을 지 문의드립니다.
항상 해결할 수 있는 답변을 주셔서 감사합니다.
WITH testtb_ph AS ( SELECT 'O' p_flag, '12345601' l_num, 'P-3' p_code, 'Y' flag UNION ALL SELECT 'O', '12345602', 'P-3', 'Y' UNION ALL SELECT 'O', '12345603', 'P-3', 'Y' UNION ALL SELECT 'O', '12345603', 'P-3', 'Y' UNION ALL SELECT 'O', '12345604', 'P-3', 'Y' UNION ALL SELECT 'O', '12345605', 'P-3', 'Y' UNION ALL SELECT 'O', '12345606', 'P-3', 'Y' UNION ALL SELECT 'O', '12345606', 'P-3', 'Y' UNION ALL SELECT 'O', '12345607', 'P-2', 'Y' ) , testtb_pl AS ( SELECT 'O' flag, '12345601' l_num, 'P0000001' o_code UNION ALL SELECT 'O', '12345602', 'P0000002' UNION ALL SELECT 'O', '12345603', 'P0000003' UNION ALL SELECT 'O', '12345604', 'P0000004' UNION ALL SELECT 'O', '12345605', 'P0000005' UNION ALL SELECT 'O', '12345606', 'P0000006' UNION ALL SELECT 'O', '12345607', 'P0000007' ) , testtb_oe AS ( SELECT 'P0000006' o_code, 'I0000001' i_code UNION ALL SELECT 'P0000001', 'I0000001' UNION ALL SELECT 'P0000002', 'I0000001' UNION ALL SELECT 'P0000003', 'I0000001' UNION ALL SELECT 'P0000004', 'I0000001' UNION ALL SELECT 'P0000005', 'I0000001' UNION ALL SELECT 'P0000007', 'J0000002' ) SELECT ROW_NUMBER() OVER(ORDER BY a.o_code DESC) rn , a.flag , a.l_num , SIGN(COUNT(c.l_num)) pf FROM testtb_pl a -- LEFT JOIN testtb_oe b -- ON a.o_code = b.o_code LEFT JOIN testtb_ph c ON c.l_num = a.l_num AND c.flag = 'Y' GROUP BY a.flag, a.l_num, a.o_code ;