안녕하세요.
예를들어 BODY 라는 필드에 AA, ZZZ, ZZZ, B, S 라는 데이터가 입력되어 있습니다.(구분자를 ,로 해서 입력한 것이죠.)
이것을 중복된 값을 제외할 수 있는 쿼리 문이 있나요?
즉 중복된 값을 제외하고 나면 AA, ZZZ, B, S
이것들만 남아 있겠지요
쿼리 검색 열심히 해도 없어서 문의드리고자 합니다 ㅠ_ㅠ.
감사합니다.
Comment 6
-
바보
2013.06.21 11:38
그런데요
WITH TEST AS(
SELECT 'A, B, A, C, D' AS body
)SELECT distinct body from test
하니까.. 그대로네요 ㅠ_ㅠ A, B, C, D 나와야할텐데요 음..
-
헉!!!!!!!!!
행이 아니고 열 하나에 데이타가 들어있는 경우군요.
일반적으로 저런 COUNT를 하는 명령은 없습니다.
함수를 만드셔야겠네요.
구글링 해보면 SPLIT를 하는 함수들 많습니다.
","를 구분자로 해서 SPLIT 한 다음 DISTINCT COUNT해서 리턴 하는 함수를 만드셔야겠네요.
-
처리짱
2013.06.21 11:43
함수를 하나 만들어야 할거 같은데요.
SELECT dbo.TestFunction('AA, ZZZ, ZZZ, B, S')CREATE FUNCTION [dbo].TestFunction(@sSource NVARCHAR(4000))
RETURNS NVARCHAR(4000)
BEGIN
DECLARE @sRet NVARCHAR(4000)IF RIGHT(@sSource, 1) != ','
SET @sSource = @sSource + ','DECLARE @table TABLE (nID INT IDENTITY(1,1), sValue NVARCHAR(100))
DECLARE @sFind NVARCHAR(1000)
DECLARE @nFind INT, @nStart INT
SET @nFind = 0
SET @nStart = 0
WHILE 1 = 1
BEGIN
SELECT @nFind = CHARINDEX(',', @sSource, @nStart)
IF @nFind > 0
BEGIN
SELECT @sFind = SUBSTRING(@sSource, @nStart, @nFind - @nStart)
INSERT INTO @table(sValue) SELECT @sFind
SET @nStart = @nFind + 1
END
ELSE
BREAK;
END
SELECT @sRet = COALESCE(@sRet+ ',' +sValue, sValue)
FROM @table
GROUP BY sValue
ORDER BY MIN(nID)RETURN @sRet
END -
바보
2013.06.21 12:59
초짜해커님과 처리짱님 감사합니다.
잘 분석하고 활용하겠습니다.
고맙습니다 ^^
-
minsouk
2013.06.21 18:27
count(distinct body)