【发布时间】:2019-02-06 02:09:18
【问题描述】:
我有一个表,其中包含两个可能的唯一标识符(ID1 和 ID2)。每行将具有这些标识符中的一个或两个。除了时间戳之外,每个 ID 的每一行中的数据都完全相同。我想消除每个值的重复值,但将空值视为唯一值。
这个问题: How to delete duplicate rows in sql server?
推荐我到这个网站: http://www.codaffection.com/sql-server-article/delete-duplicate-rows-in-sql-server/
我在哪里提出了以下查询:
WITH CTE AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY ID1 ORDER BY ID1) AS RN
FROM Filings_Search
)
DELETE FROM CTE WHERE RN<>1
不幸的是,这也删除了我所有的空值!如何修改此查询以避免删除空值?
编辑: 这是我的数据的示例(如果有人知道如何很好地格式化表格,请告诉我。我使用了https://senseful.github.io/text-table/)。
+------+------+----------+-----------+
| ID1 | ID2 | Data | Timestamp |
+------+------+----------+-----------+
| NULL | abc | macd | 01:40 |
| NULL | abc | macd | 04:23 |
| NULL | def | pfchangs | 01:41 |
| 123 | NULL | wendys | 02:42 |
| 123 | NULL | wendys | 03:45 |
+------+------+----------+-----------+
在 ID1 上运行会输出:
+------+------+----------+-----------+
| ID1 | ID2 | Data | Timestamp |
+------+------+----------+-----------+
| NULL | abc | macd | 01:40 |
| NULL | abc | macd | 04:23 |
| NULL | def | pfchangs | 01:41 |
| 123 | NULL | wendys | 02:42 |
+------+------+----------+-----------+
在 ID2 上运行会输出:
+------+------+----------+-----------+
| ID1 | ID2 | Data | Timestamp |
+------+------+----------+-----------+
| NULL | abc | macd | 01:40 |
| NULL | def | pfchangs | 01:41 |
| 123 | NULL | wendys | 02:42 |
| 123 | NULL | wendys | 03:45 |
+------+------+----------+-----------+
抱歉,如果这是重复的,我是一个 SQL 初学者,找不到与我正在寻找的完全一样的东西。
【问题讨论】:
-
向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。
-
NULL 值是多少?现在还不清楚什么是数据以及要删除的行以及要保留的行。所以除了猜测之外,我们真的无法帮助您。
-
要格式化为
code,选择文本并按ctrl-k或在每行前添加4个空格
标签: sql duplicates sql-delete