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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 아래 쿼리문은 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) 쿼리문으로 바꿔서 같은 결과를 내고 싶은데,
해결이 되지 않습니다.
어떻게 수정하면 같은 결과를 얻을 수 있을 지 문의드립니다.
항상 해결할 수 있는 답변을 주셔서 감사합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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 ; |