by 뚱이 [SQL Query] ACCESS MDB SELECT문 [2020.10.12 16:52:50]
NO | ITEMNAME | CHECK |
0 | HEADER NAME1 | * |
1 | AA | Q |
2 | BB | G |
1000 | HEADER NAME2 | * |
1001 | CC | B |
2000 | HEADER NAME3 | * |
2001 | DD | G |
2001 | EE | G |
EXTRA | HEADER NAME4 | * |
위 구조로 데이터가 쌓이고 있고 해당 데이터를 아래 모양으로 조회하고 싶습니다..
(HEADER) | (NEW NO) | ITEMNAME | |
HEADER NAME1 | 1 | AA | |
HEADER NAME1 | 2 | BB | |
HEADER NAME2 | 1 | CC | |
HEADER NAME3 | 1 | DD | |
HEADER NAME3 | 2 | EE |
< 참고 >
(HEADER)의 데이터 기준은 CHECK컬럼의 [ * ] 이 있는 ITEMNAME입니다.
NO 1 ..... 9999 사이에 [*] ~ 다음 [*]이 HEADER 묶음의 기준입니다.
이미 오랫동안 사용하고있는 DB라 구조적으로 바꿀 순 없습니다..
SELECT문으로 안되면 프로시저 같은걸로 프로그래밍 요소를 넣어서 만들어야 될까요..?
구글에 뭐라고 검색해야 될지도 감이 안잡혀서 키워드만이라도 알려주시면 감사하겠습니다.
도움 구해봅니다..
우주민님, 마농님 다시금 답글 감사합니다!
NO가 1,2,3..이렇게는 아니지만 1,3,4,1001,1002 크기순으로 정렬이 되어있는 부분을 활용하였습니다.
타 커뮤니티 답변 중 JOIN 활용과 구글링중 COUNT(*)를 활용하여 ROWNUM을 작성한 걸 보고 영감을 받아
SELECT COUNT(*) FROM Tbl1 WHERE CHECK = '*' AND A1.NO >= NO
위 한줄로 제가 원하는 헤더에 속하는 아이템들에게 각각 같은 번호를 부여할 수 있었고 이후 그 번호로 조인으로 연결해주어 완성했습니다 ㅎ
알고보니 NEW NO는 필요없었고 기존 NO만 있었으면 되었습니다 ㅎ
해결한 쿼리 공유합니다~!
SELECT AA1.ITEMNAME AS HEADER, AA2.NO AS NEWNO, AA2.ITEMNAME FROM ( SELECT (SELECT COUNT(*) FROM Tbl1 WHERE CHECK = '*' AND A1.NO >= NO) AS ROWNUM,* FROM Tbl1 AS A1 WHERE CHECK='*' ) AS AA1 INNER JOIN ( SELECT (SELECT COUNT(*) FROM Tbl1 WHERE CHECK = '*' AND A2.NO >= NO) AS ROWNUM,* FROM Tbl1 AS A2 ) AS AA2 ON AA1.ROWNUM = AA2.ROWNUM