2012-05-24 7 views
9

보기가 있습니다. 어떻게 다른 기록 만 표시 할 수 있습니까? 19 개의 기둥이 있습니다. 어떤 것도 복제하지 않고 모든 것을 하나씩 표시하고 싶습니다. 중복 된 것을 삭제하고 싶지 않습니다. 나는 그것을 보는 목적으로 만 요구한다.보기에서 중복 레코드 제거

 SELECT DISTINCT([Complaint Number]),[Complaint_For],[Total_Complaint_Qty] 
     ,[Defects],[Customer Code ],[Location],[CutomerName],[KUNUM],[QMNUM] 
     ,[Responsible_KAM] 
     FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 

이전 쿼리를 사용하는 경우 1000 개의 레코드가 반환됩니다. 하지만 다음 쿼리를 사용하면 정확한 레코드가 중복없이 반환됩니다. 하지만 모든 열을 표시하고 싶습니다.

 SELECT DISTINCT([Complaint Number]) 
     FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 

답변

12

/모든 불만 번호, 그래서 DISTINCT 작동하지 않습니다 사용. 당신이 열 1 = A에 대한 하나의 기록을 원하는 경우 간단한 테이블과 같은

Column1 | Column2 
-----------+------------ 
A   | X 
A   | Y 

을 고려, SQL은 열 2에서 X 또는 Y를 넣어 여부를 알 수있는 방법이 있습니다. 이것은 당신이 가지고있는 것과 같은 문제이지만, 2가 아닌 19 열을 가지고 있습니다. 각 불만 번호에 어떤 행이 표시 될지 결정하는 방법에 관해서는 일종의 논리를 구현해야합니다. 여기

SELECT Column1, 
     Column2 
FROM ( SELECT Column1, 
        Column2, 
        ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber] 
      FROM MyTable 
     ) t 
WHERE RowNumber = 1 

내가 만 가장 높은 우선 순위를 표시, 각 행의 우선 순위를 위해 ROW_NUMBER() 기능을 사용하고 있습니다 : 그래서 위의 표에 대해 나는 다음과 같은 쿼리를 사용하는 것이 열 2에 표시 할 X를 원한다면. 그들이 어떤 순서로 나오는지 신경 쓰지 않는다면 무언가를 사용하여 무작위 행을 선택할 수 있습니다. 내가 무슨 논리가 나는 당신이 필요로 정확히 게시 할 수 없습니다,하지만 난 시도하고 얻을 수있는 쿼리에 적용 할 알고하지 않기 때문에

ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber] 

당신은 시작 :

SELECT [Complaint Number], 
     [Complaint_For], 
     [Total_Complaint_Qty], 
     [Defects], 
     [Customer Code ], 
     [Location], 
     [CutomerName], 
     [KUNUM], 
     [QMNUM], 
     [Responsible_KAM] 
FROM ( SELECT [Complaint Number], 
        [Complaint_For], 
        [Total_Complaint_Qty], 
        [Defects], 
        [Customer Code ], 
        [Location], 
        [CutomerName], 
        [KUNUM], 
        [QMNUM], 
        [Responsible_KAM], 
        ROW_NUMBER() OVER(PARTITION BY [Complaint Number] ORDER BY Complaint_For, Defects) AS RowNumber 
      FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 
     ) data 
WHERE RowNumber = 1 

그냥 바이올린해야 주변에있는 ORDER BYROW_NUMBER의 기능에 맞게 사용할 수 있습니다.

+1

제쳐두고, 열 및 테이블/뷰의 이름을 변경하는 것을 고려하십시오. 객체 이름의 공백은 혐오 스럽습니다. – GarethD

+1

고맙습니다 .. 100 % 일하고 있습니다 .. –

+0

GarethD the Genius ... –

0

distinct에는 ()을 사용하지 마십시오. 그냥 사용

select distinct col1, col2 .. from your_table 
+0

동일한 결과가 나타날 수 있습니다. –

+0

위의 쿼리는 테이블의 모든 고유 값을 생성해야합니다. 일부 데이터 게시, 도움이 될 것입니다 – Diego

1

보십시오 : 당신은 일부 중복 레코드가 있어야합니다

SELECT [Complaint Number], MAX([Complaint_For]), MAX([Total_Complaint_Qty]), ... 
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_] 
GROUP BY Complaint Number