您必須重複記錄的部分/全部投訴的數字,所以使用DISTINCT
將無法正常工作。考慮一個簡單的表格,如
Column1 | Column2
-----------+------------
A | X
A | Y
如果你只想要一個記錄列1 = A,SQL無法知道是否把X或Y在列2的方式。這是你遇到的同樣的問題,但有19列,而不是2.你需要實現某種邏輯,以決定如何決定哪一行將顯示每個投訴號碼。因此,對於上表中,如果我想在X向列2顯示我會用下面的查詢:
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
你只需要撥弄ROW_NUMBER
函數內的ORDER BY
可以滿足您的需求。
另外,考慮重命名你的列和表/視圖。對象名稱中的空格是可惡的。 – GarethD
謝謝..他100%的工作.. –
GarethD天才... –