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

Sql server 2008 如何在分区中使用多个列并确保不返回重复的行,sql-server-2008,no-duplicates,partition-by,Sql Server 2008,No Duplicates,Partition By,我在SQL中的Partition By语句中使用了多列,但返回了重复的行。我只希望返回不同的行 这是我在分区中编写的代码: SELECT DATE, STATUS, TITLE, ROW_NUMBER() OVER (PARTITION BY DATE, STATUS, TITLE ORDER BY QUANTITY ASC) AS Row_Num FROM TABLE 这是我当前得到的输出:返回重复的行-请参考第6到8行 这就是我想要实现的输出:不返回重复的行-请参考第6到8行 问题

我在SQL中的Partition By语句中使用了多列,但返回了重复的行。我只希望返回不同的行

这是我在分区中编写的代码:

SELECT DATE, STATUS, TITLE, ROW_NUMBER() OVER (PARTITION BY DATE, STATUS, TITLE ORDER BY QUANTITY ASC) AS Row_Num
    FROM TABLE
这是我当前得到的输出:返回重复的行-请参考第6到8行

这就是我想要实现的输出:不返回重复的行-请参考第6到8行

问题:如何在1个分区中放置多个列,并确保不返回重复的行


如果有人能在这方面提供帮助,我将不胜感激,非常感谢

如果您的表列包含重复的数据,并且如果您直接应用行号并在列上创建分区,则有可能导致重复的行和行号值

要删除重复的行,您需要在from子句中再进行一次内部查询,以消除重复的行,然后它将输出到最前面的外部from子句,您可以在其中应用分区和行号

如下例所示:

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

我会创建一个cte并进行内部连接。虽然效率不高,但很方便

with table as (
SELECT DATE, STATUS, TITLE, ROW_NUMBER() 
OVER (PARTITION BY DATE, STATUS,  TITLE ORDER BY QUANTITY ASC) AS Row_Num
 FROM TABLE)

select *

from table t
join select(
max(Row_Num) as Row_Num
,DATE
,STATUS
,TITLE
from table 
group by date, status, title) t2  
on t2.Row_Num = t.Row_Num and t2
and t2.date = t.date
and t2.title = t.title
试试这个, 它对我有用

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 

您好@Bhavesh Harsora,您尝试过这种方法,但不起作用。这就是我尝试过的:选择tbl.DATE,STATUS,tbl.TITLE,ROW_NUMBER OVER PARTITION BY DATE,STATUS,TITLE ORDER BY QUANTITY ASC AS ROW_Num FROM SELECT DISTINCT TITLE FROM TABLE AS tblYour给定的查询缺少您指定的内部查询中的{tbl.DATE,STATUS}列,其中您只使用了一个TITLE列。您还可以尝试另一种方法,例如使用GROUP BY和HAVING子句删除重复的值。hi@Bhavesh Harsora,已经尝试过这两种方法,但都不起作用。我试图添加您提到的缺少的列,但仍然返回相同的行。接下来,我尝试在内部查询中使用GROUPBY和HAVING子句,但仍然返回相同的行。