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不适合你。在您的实际使用中是否涉及其他领域?或隐藏的字符等?一个简单的独特的应该是很好的选择。