2012-01-20 3 views
0

가능한 중복 :
Combine multiple results in a subquery into a single comma-separated value
Concat groups in SQL ServerGROUP_CONCAT 2008

내가 중복의는 그것이 MySQL의에서

SELECT Count(Data) as Cnt, Id 
FROM [db].[dbo].[View_myView] 
Group By Data 
HAVING Count(Data) > 1 

을 제거 얻을 수 있도록하려면 다음과 같이 간단합니다.

SELECT Count(Data), group_concat(Id) 
FROM View_myView 
Group By Data 
Having Cnt > 1 

해결책을 아는 사람이 있습니까? 예는 플러스입니다!

+1

집계 함수에서 사용하는 것을 '그룹화'할 수 없습니다. 나는 당신이'id by group'을 의미한다고 생각합니다. –

+0

@marc_s 감사합니다! –

+0

DB에서 dups를 제거하려고합니다. MSSQL은 이것을 단순하게 만들지 않으며, 이것은 "검색"을 끝내고 DB의 작업에서 항상 사용됩니다. 처음에는 dups를 막을 수있는 방법이 있어야하지만 이것은 내 DB 및 응용 프로그램이 아닙니다. –

답변

1

:

;WITH LastPerUser AS 
(
    SELECT 
     ID, UserID, ClassID, SchoolID, Created, 
     ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum' 
    FROM dbo.YourTable 
) 
SELECT 
    ID, UserID, ClassID, SchoolID, Created, 
FROM LastPerUser 
WHERE RowNum = 1 

이 CTE "파티션"UserID하여 데이터, 각 파티션에 대해 ROW_NUMBER 함수는 1부터 시작하여 Created DESC에 의해 정렬 된 순차 번호를 전달합니다. 따라서 가장 최근 행은 RowNum = 1 (각 UserID에 해당)을 얻습니다.이 후 바로 SELECT 문에서 CTE에서 선택합니다.

;WITH LastPerUser AS 
(
    SELECT 
     ID, UserID, ClassID, SchoolID, Created, 
     ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum' 
    FROM dbo.YourTable 
) 
DELETE FROM dbo.YourTable t 
FROM LastPerUser cte 
WHERE t.ID = cte.ID AND cte.RowNum > 1 

같은 원리가 적용됩니다 : 당신은 쉽게 중복을 삭제할 수 있습니다 동일한 CTE를 사용

각 데이터에 대한 "그룹"(또는 파티션) 데이터를 어떤 기준으로하면 연속적으로 번호 모든 행 파티션 및 "파티션 된 행 번호"에 대해 1보다 큰 값을 갖는 파티션은 DELETE에 의해 제거됩니다.

0

중복을 제거하려면 distinct을 사용하십시오. group_concat을 사용하여 실제로 그 값을 사용하지 않고도 복제본을 결합한 것처럼 들립니다. 또한,

SELECT DISTINCT Count(Data) as Cnt, Id 
FROM [db].[dbo].[View_myView] 
GROUP BY Id 
HAVING Count(Data) > 1 

당신 수 없습니다 당신이 집계 함수에서 사용 group by 뭔가; :이 경우, MySQL은 또한 distinct가 당신이 사용하고 있었다 나는 group by id을 의미한다고 생각합니다. 위의 예에서 수정했습니다. 버전 2005 새로운, 당신은 중복 제거하기 위해 ROW_NUMBER 기능으로 CTE (공통 테이블 식)를 사용하여 현재 SQL 서버에서

+0

@Justin Satyr! 감사합니다! 본인의 의도는 그룹화 기준으로 데이터 열을 사용하는 것입니다. 분명히 MSSQL은 그렇게 할 수 없습니다. 나는 MySQL에서 MSSQL으로 옮겨 가고있다. 나는 내가 버릇이 있었다고 생각한다! –