Kul*_*rma 9 sql sql-server sql-server-2008
我有一个观点.如何仅显示其中的不同记录.有19列.我想显示所有单个而没有任何重复,我不想删除重复项.我要求它仅用于查看目的.
SELECT DISTINCT([Complaint Number]),[Complaint_For],[Total_Complaint_Qty]
,[Defects],[Customer Code ],[Location],[CutomerName],[KUNUM],[QMNUM]
,[Responsible_KAM]
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
Run Code Online (Sandbox Code Playgroud)
如果我使用上一个查询,则返回1000条记录.但是,如果我使用以下查询,它将返回没有重复的精确记录.但是我希望显示所有列.
SELECT DISTINCT([Complaint Number])
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
Run Code Online (Sandbox Code Playgroud)
Gar*_*thD 12
某些/所有投诉号码必须有重复记录,因此使用DISTINCT不起作用.考虑一个简单的表,如
Column1 | Column2
-----------+------------
A | X
A | Y
Run Code Online (Sandbox Code Playgroud)
如果只需要Column1 = A的一条记录,则SQL无法知道是否将X或Y放在Column2中.这是你遇到的同样的问题,但有19列,而不是2.你需要实现某种逻辑来决定如何为每个投诉号决定哪一行.因此对于上表,如果我想要在Column2中显示X,我将使用以下查询:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Run Code Online (Sandbox Code Playgroud)
这里我使用ROW_NUMBER()函数来确定每一行的优先级,然后只显示具有最高优先级的那一行.如果我不在乎他们出现的顺序,我可能会使用这样的东西随机选择一行.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Run Code Online (Sandbox Code Playgroud)
由于我不知道应用于您的查询的逻辑,我无法准确发布您需要的内容,但我可以尝试让您入门:
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
Run Code Online (Sandbox Code Playgroud)
您只需要ORDER BY在ROW_NUMBER功能内调整以满足您的需求.
| 归档时间: |
|
| 查看次数: |
4340 次 |
| 最近记录: |