DB
[MSSQL] 일부 컬럼을 분리해서 JOIN - CROSS APPLY
쑤기c
2018. 3. 27. 16:51
--일부 컬럼을 분리해서 JOIN - CROSS APPLY
SELECT A.ModelID, E.VALUE AS EquipmentID
FROM dbo.MODEL_INFO A WITH(NOLOCK)
CROSS APPLY dbo.SP_SPLIT(A.EquipmentID, ',') E
LEFT OUTER JOIN MODEL_HISTORY B WITH(NOLOCK) ON A.ModelID = B.ModelID AND B.Apply = 1
WHERE B.ModelID IS NOT NULL
-- SP_SPLIT(str,seperator) 는 구분자로 분리해서 테이블을 반환하는 함수 CREATE FUNCTION dbo.SP_SPLIT ( @StrValue VARCHAR(6000), -- 분리할 문자열 @SplitChar VARCHAR(1) -- 구분할 문자 ) RETURNS @SPLIT_TEMP TABLE ( VALUE VARCHAR(1000) ) AS BEGIN DECLARE @oPos INT, @nPos INT DECLARE @TmpVar VARCHAR(1000) -- 분리된 문자열 임시 저장변수 SET @oPos = 1 -- 구분문자 검색을 시작할 위치 SET @nPos = 1 -- 구분문자 위치 WHILE (@nPos > 0) BEGIN SET @nPos = CHARINDEX(@SplitChar, @StrValue, @oPos ) IF @nPos = 0 SET @TmpVar = RIGHT(@StrValue, LEN(@StrValue)-@oPos+1 ) ELSE SET @TmpVar = SUBSTRING(@StrValue, @oPos, @nPos-@oPos) IF LEN(@TmpVar)>0 INSERT INTO @SPLIT_TEMP VALUES( @TmpVar ) SET @oPos = @nPos +1 END END
MODEL_INFO.EquipmentID 'eqpid_01,eqpid_02' 라는 데이터에 대해서
결과물을 2 row 로 분리해야할때 사용.
반응형