一部またはすべての苦情番号のレコードが重複している必要があるため、使用しても機能し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