8

私は見解を持っています。それとは異なるレコードのみを表示するにはどうすればよいですか。19列あります。重複せずにすべてを1つに表示したいのですが、重複を削除したくありません。閲覧目的でのみ必要です。

        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_]
4

3 に答える 3

11

一部またはすべての苦情番号のレコードが重複している必要があるため、使用しても機能しDISTINCTません。次のような単純なテーブルを考えてみましょう。

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

Column1 = A のレコードが 1 つだけ必要な場合、SQL は X と Y のどちらを Column2 に入れるかを知る方法がありません。これはあなたが抱えているのと同じ問題ですが、2 列ではなく 19 列です。苦情番号ごとにどの行を表示するかを決定する方法について、何らかのロジックを実装する必要があります。したがって、上記のテーブルで X を Column2 に表示したい場合は、次のクエリを使用します。

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()関数を使用して各行に優先順位を付け、優先度が最も高い行のみを表示しています。それらがどの順序で出てきたか気にしない場合は、このようなものを使用してランダムな行を選択するかもしれません.

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 BY内をいじるだけです。ROW_NUMBER

于 2012-05-24T08:48:28.457 に答える
1

試す:

SELECT [Complaint Number], MAX([Complaint_For]), MAX([Total_Complaint_Qty]), ...
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
GROUP BY Complaint Number
于 2012-05-24T08:47:05.367 に答える
0

()には使用しないでくださいdistinct。使用するだけです:

select distinct col1, col2 .. from your_table
于 2012-05-24T08:36:39.753 に答える