Musíte mít duplicitní záznamy pro některá/všechna čísla stížností, takže pomocí DISTINCT
to nebude fungovat. Zvažte jednoduchou tabulku, jako je
Column1 | Column2
-----------+------------
A | X
A | Y
Pokud chcete pouze jeden záznam pro Sloupec1 =A, SQL nemá žádný způsob, jak zjistit, zda vložit X nebo Y do Sloupec2. Toto je stejný problém jako vy, ale s 19 sloupci, nikoli 2. Musíte implementovat nějakou logiku, jak rozhodnout, který řádek se zobrazí pro každé číslo stížnosti. Takže pro výše uvedenou tabulku, pokud bych chtěl, aby se X zobrazovalo ve sloupci2, použil bych následující dotaz:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Zde používám ROW_NUMBER()
funkci upřednostnit každý řádek a poté zobrazit pouze ten s nejvyšší prioritou. Kdyby mi bylo jedno, v jakém pořadí vyšly, mohl bych použít něco takového k výběru náhodného řádku.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Protože nevím, jakou logiku použít na váš dotaz, nemohu zveřejnit přesně to, co potřebujete, ale mohu se pokusit vás začít:
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
Stačí si pohrát s ORDER BY
v rámci ROW_NUMBER
funkce podle vašich potřeb.