[MSSQL] 일부 컬럼을 분리해서 JOIN - CROSS APPLY
Posted on 2018. 3. 27. 16:51
Filed Under DB
--일부 컬럼을 분리해서 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 로 분리해야할때 사용.
반응형