mssql select 안에서 만든 컬럼 바로 사용하는 방법이 있나요?
조회수 486회
SELECT D.dev_serial
,D.dev_name
/* location */
,case when charIndex(']', dbo.funcSplit(dbo.funcSplit(D.dev_name, '(', 1) , '_', 3)) > 0 then dbo.funcSplit(dbo.funcSplit(dbo.funcSplit(D.dev_name, '(', 1) , '_', 3), ']', 2)
when charIndex(']', dbo.funcSplit(dbo.funcSplit(D.dev_name, '(', 1) , '_', 3)) = 0 then dbo.funcSplit(dbo.funcSplit(D.dev_name, '(', 1) , '_', 3)
when len(dbo.funcSplit(dbo.funcSplit(D.dev_name, '(', 1), '-', 2)) < 5 then dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), '(', 1)
when dbo.funcSplit(dbo.funcSplit(D.dev_name, '(', 1) , '_', 2) = NULL then D.dev_name
when dbo.funcSplit(dbo.funcSplit(D.dev_name, '(', 1) , '_', 3) = NULL then dbo.funcSplit(dbo.funcSplit(D.dev_name, '(', 1) , '_', 2)
else D.dev_name end as location
/* location_code */
,case when len(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)) = 2 then dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)
when len(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)) = 3 then dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)
when len(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)) = 4 then dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)
when len(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)) = 6 then dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)
when len(dbo.funcSplit(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1), ']', 2)) > 3 then left(dbo.funcSplit(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1), ']', 2), 3)
when CHARINDEX(']', dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)) > 0 then dbo.funcSplit(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1), ']', 2)
when dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1) = NULL then D.dev_name
when len(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)) = 0 then dbo.funcSplit(D.dev_name, ' ', 2)
when len(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1)) > 18 then left(dbo.funcSplit(dbo.funcSplit(D.dev_name, '_', 3), ' ', 1),3)
else D.dev_name end as location_code
FROM cheonan01.vms_device D
이렇게 작성했을 때 아래 사진과 같은 구조가 생성 됩니다. 그런데 location_code들의 정보를 영문으로 번역한 값을 넣기 위해서 select 문 안에서 바로 location_code를 사용해서 만약 '반포동'일 때 'Banpo-dong'이렇게 변환한 정보를 location_code_eng라는 컬럼에 쌓고싶습니다.
가능한 방법이 있을까요?
1 답변
-
그 한-영 매칭 정보가 있는 (임시)테이블을 쓰면 됩니다.
CREATE TABLE #location_names( ko varchar(50), en varchar(100) ); INSERT INTO location_names (ko, en) VALUES ('반포동', 'Banpo-dong'), ('대포동', 'Taepo-dong'); WITH locations AS ( -- 여기에 올려주신 SELECT문 전체 입력 ) SELECT l.*, ln.en AS location_code_eng FROM locations l LEFT JOIN location_names ln ON ln.ko = l.location_code;
댓글 입력