gpt4 book ai didi

sql - 从 View 中删除重复记录

转载 作者:行者123 更新时间:2023-12-04 22:11:29 25 4
gpt4 key购买 nike

我有一个看法。我如何只显示与此不同的记录。有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_]

最佳答案

您必须对某些/所有投诉编号有重复的记录,因此使用DISTINCT将不起作用。考虑一个简单的表,例如

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

如果您只想为Column1 = A保留一条记录,则SQL无法知道是否将X或Y放入Column2中。这是您遇到的相同问题,但有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即可满足您的需求。

关于sql - 从 View 中删除重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10733854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com