Fel*_*Soh 10 no-duplicates sql-server-2008 partition-by
我在SQL的Partition By语句中使用了多列,但是返回了重复的行。我只希望返回不同的行。
这是我在Partition By中编写的代码:
SELECT DATE, STATUS, TITLE, ROW_NUMBER() OVER (PARTITION BY DATE, STATUS, TITLE ORDER BY QUANTITY ASC) AS Row_Num
FROM TABLE
Run Code Online (Sandbox Code Playgroud)
这是我当前得到的输出:(如果有重复的行返回,请参考第6至8行)

这是我想要实现的输出:(没有重复的行被返回- 请参考第6至8行)

问题:如何在“ 1个分区依据”中放置多列并确保不返回任何重复行?
感谢有人可以在这方面为我提供帮助,非常感谢!
Ank*_*nka 20
试试这个,它对我有用
SELECT * FROM (
SELECT
[Code],
[Name],
[CategoryCode],
[CreatedDate],
[ModifiedDate],
[CreatedBy],
[ModifiedBy],
[IsActive],
ROW_NUMBER() OVER(PARTITION BY [Code],[Name],[CategoryCode] ORDER BY ID DESC) rownumber
FROM MasterTable
) a
WHERE rownumber = 1
Run Code Online (Sandbox Code Playgroud)
如果您的表列包含重复数据并且如果您直接应用 row_number() 并在列上创建 PARTITION,则有可能导致重复的行和行号值。
要删除重复行,您需要在 from 子句中再执行一个 INNER 查询以消除重复行,然后它将输出输出到最重要的外部 FROM 子句,您可以在其中应用 PARTITION 和 ROW_NUMBER ()。
如下例所示:
SELECT DATE, STATUS, TITLE, ROW_NUMBER() OVER (PARTITION BY DATE, STATUS, TITLE ORDER BY QUANTITY ASC) AS Row_Num
FROM (
SELECT DISTINCT <column names>...
) AS tbl
Run Code Online (Sandbox Code Playgroud)