我有一个观点。如何仅显示其中的不同记录。有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_]
答案 0 :(得分:12)
您必须拥有部分/全部投诉号码的重复记录,因此使用DISTINCT
将无效。考虑一个简单的表,如
Column1 | Column2
-----------+------------
A | X
A | Y
如果只需要Column1 = A的一条记录,SQL无法知道是否在Column2中放置X或Y.这是你遇到的同样的问题,但有19列,而不是2.你需要实现某种逻辑,以确定如何为每个投诉编号显示哪一行。因此,对于上表,如果我希望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
即可满足您的需求。
答案 1 :(得分:1)
尝试:
SELECT [Complaint Number], MAX([Complaint_For]), MAX([Total_Complaint_Qty]), ...
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
GROUP BY Complaint Number
答案 2 :(得分:0)
不要将()
用于distinct
。只需使用:
select distinct col1, col2 .. from your_table