如何在分区中使用多个列并确保不返回任何重复的行

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)


Bha*_*ora 7

如果您的表列包含重复数据并且如果您直接应用 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)