반응형

탐색기의 전체 경로 처럼, 분류(category) 항목을 연결해서 보여줄 때 써먹을 수 있다.

(지출 > 기호품 > 간식 > 빵) 처럼 사용할 때.

상수 테이블A의 데이터가 다음 표처럼 있을 때

ID 상위ID 항목
1   이상한항목
2 2 주항목
3 2 보조항목

 

기록용 테이블B에서 [항목]을 다음과 같이 표시되게 하려면?

ID [Primary Key] 항목 [Int Type]
1 이상한항목
2 주항목
3 주항목 > 보조항목
  • [상위ID]가 없는 이상한항목은 그대로 출력
  • [ID]와 [상위ID]가 같은 레코드는 값을 그대로 출력
  • [상위ID]가 다른 레코드의 [ID]를 가리키는 레코드는 문자열 앞에 '상위항목 > ' 문자열을 붙여서 출력
  • GRID, VIEW에서만 문자열을 붙여서 보여줄 뿐, 실제 DB레코드에는 [ID] 숫자가 들어간다.

 

테이블B의 [항목]의 필드 속성 중 조회-행 원본 입력란에 다음과 같이 적용하면 된다.
열 너비는 0cm;5cm 처럼 ID영역을 숨겨야 [항목] 문자열 값이 입력 된다.

SELECT 테이블A.ID AS ID, (C.NEW항목 & 테이블A.항목) AS 항목
FROM 테이블A
 LEFT JOIN
 (SELECT A.ID, A.상위ID, B.항목+' > ' AS NEW항목
 FROM 테이블A AS A
 LEFT JOIN 테이블A AS B ON B.ID = A.상위ID
 WHERE A.상위ID <> 0 and A.상위ID <> A.ID) AS C ON 테이블A.ID = C.ID

방금 전에 SQL문을 익힌 초보자가 만든거라 코드가 복잡하다.

  1. 먼저 [상위ID] 값이 있고, [ID]와 [상위ID] 값이 다른 레코드를 찾는다. (테이블A에서 3번 레코드겠지?)
  2. 위에서 찾은 결과물의 항목값과 ' > ' 문자열을 '+' 기호로 합쳐서 [NEW항목] 컬럼에 기록한다.
  3. 위에서 합친 문자열([항목]+' > ')이 있는 [NEW항목]과 기존 [항목]값을 붙여서 [항목] 컬럼에 기록한다.

& 기호는 곱하기 연산이고, + 기호는 더하기 연산이다.
+, & 기호를 잘못 사용하면 결과물이 달라진다.

 

개정

2023-11-14. 표 값 오류 정정. 설명 변경.

반응형

관련글