[ACCESS] SELECT문 쿼리를 못짜겠어요.. 도와주세요 ㅠ 0 4 218

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문으로 안되면 프로시저 같은걸로 프로그래밍 요소를 넣어서 만들어야 될까요..? 

구글에 뭐라고 검색해야 될지도 감이 안잡혀서 키워드만이라도 알려주시면 감사하겠습니다.

 

도움 구해봅니다..

by 우주민 [2020.10.13 15:13:51]

적어도 No(old No) 가 순차적으로 정렬되어있다는 조건이라도 있다면 어떻게든 만들어지기는 하겠는데....

그런 기본 사항을 모르니 단순 쿼리로는 힘들거 같네요.


by 마농 [2020.10.14 08:54:22]

다른 DBMS 라면? 분석함수등을 이용해 구현이 가능한데.
MS ACCES 의 경우엔 구문도 많이 다르고, 지원되지 않는 기능들이 많아서
SQL 기본 기능 만으로는 구현이 쉽지 않을 듯 하네요.


by 뚱이 [2020.10.14 17:47:52]

답글 감사합니다! 혹여나 해결하게되면 공유하도록 할게요 ㅎ


by 뚱이 [2020.10.16 09:45:54]

우주민님, 마농님 다시금 답글 감사합니다!

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
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입