Sql server 从SQL Server中的视图中删除重复记录

Sql server 从SQL Server中的视图中删除重复记录,sql-server,Sql Server,如何从视图中删除重复记录?我需要把它们放在物理表上,但在视图中,我不想要重复的 以下是我使用的查询: CREATE VIEW myview AS SELECT DISTINCT * FROM [roug].[dbo].[Table_1] ORDER BY id 对于表格: id| name age ---------- c1 ann 12 u2 joe 15 c1 ann 12 c1 ann 12 u5 dev 13 u3 Jim

如何从视图中删除重复记录?我需要把它们放在物理表上,但在视图中,我不想要重复的

以下是我使用的查询:

 CREATE VIEW myview 
 AS 
     SELECT DISTINCT *
     FROM [roug].[dbo].[Table_1]
     ORDER BY id 
对于表格:

id| name age
----------
c1  ann  12
u2  joe  15
c1  ann  12
c1  ann  12
u5  dev  13
u3  Jim  16
u3  Jim  16

您可以像这样使用DISTINCT或ROW_NUMBER()

create view myview as
WITH CTE
AS
(
    SELECT  
    RN = ROW_NUMBER() OVER(PARTITION BY [Id],[Name],[Age] ORDER BY ID),
    *
 FROM [roug].[dbo].[Table_1]
)
SELECT
    [Id],[Name],[Age]
    FROM CTE
        WHERE RN = 1

您可以像这样使用DISTINCT或ROW_NUMBER()

create view myview as
WITH CTE
AS
(
    SELECT  
    RN = ROW_NUMBER() OVER(PARTITION BY [Id],[Name],[Age] ORDER BY ID),
    *
 FROM [roug].[dbo].[Table_1]
)
SELECT
    [Id],[Name],[Age]
    FROM CTE
        WHERE RN = 1

如果要删除数据,则应在源表而不是视图中执行。重复数据消除的标准方法是通过cte。试一试

;
  WITH  cte
          AS (SELECT    id
              ,         name
              ,         age
              ,         ROW_NUMBER() OVER (PARTITION BY id, name, age ORDER BY id) RN
              FROM      Table_1
             )
    DELETE  FROM cte
    WHERE   RN > 1

取决于是否要删除实际数据,或者只是不在视图中显示数据。

如果要删除数据,则应在源表而不是视图中执行。重复数据消除的标准方法是通过cte。试一试

;
  WITH  cte
          AS (SELECT    id
              ,         name
              ,         age
              ,         ROW_NUMBER() OVER (PARTITION BY id, name, age ORDER BY id) RN
              FROM      Table_1
             )
    DELETE  FROM cte
    WHERE   RN > 1

取决于您是要删除实际数据,还是不在视图中显示它。

ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML。这是获取@Jayasurya的错误消息Satheesh@AnuAntony尝试不使用Order by。我已更新应答Order by子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML。这是获取@Jayasurya的错误消息Satheesh@AnuAntony我已经更新了答案。您是否正在尝试从表中删除物理副本?或者您只需要在视图中查看没有重复项的记录,但希望将记录保留在表中?需要在视图中查看没有重复项的记录。保持表中的记录保持不变@jayasuryasathesh是否尝试从表中删除物理副本?或者您只需要在视图中查看没有重复项的记录,但希望将记录保留在表中?需要在视图中查看没有重复项的记录。保持表中的记录保持不变@jayasuryasathesh问题是从视图中跳过重复项,而不是从表中删除它们没有问题。问题的措辞有时很难。我的答案和Jayasurya的都使用相同的技术,尽管我确实想知道为什么DISTINCT不适合你。在您的实际使用中是否涉及其他领域?或隐藏的字符等?一个简单的distinct应该只用于选择。问题是从视图中跳过重复项,而不是从表中删除它们没有问题。问题的措辞有时很难。我的答案和Jayasurya的都使用相同的技术,尽管我确实想知道为什么DISTINCT不适合你。在您的实际使用中是否涉及其他领域?或隐藏的字符等?一个简单的独特的应该是很好的选择。