SQL Server删除所有具有重复(包括)的行

时间:2018-03-20 02:05:02

标签: sql sql-server

我有一个名为Sales的表:

+----------+-----------------+------------+
| Salesman | Sales Portfolio |   Month    |
+----------+-----------------+------------+
| Kavi     |           12500 | 2018-01-05 |
| Kavi     |           12500 | 2018-02-28 |
| Kavi     |           12500 | 2018-03-20 |
| Raj      |           21055 | 2018-01-05 |
| Raj      |           32015 | 2018-02-28 |
| Raj      |           12000 | 2018-03-20 |
+----------+-----------------+------------+

如果Sales Portfolio值重复,请从表中删除包括其自身在内的所有行。在上面的示例中,12500是重复的,因此请删除Sales Portfolio = 12500

中的所有行

预期输出示例(仅显示Raj):
enter image description here

1 个答案:

答案 0 :(得分:3)

如果您只想显示预期输出,请尝试以下操作:

WITH cte AS (
    SELECT *,
        COUNT(*) OVER (PARTITION BY Salesman, [Sales Portfolio]) cnt
    FROM yourTable
)

SELECT
    Salesman, [Sales Portfolio], Month
FROM cte
WHERE cnt = 1;

如果你想删除非显示记录,那么我们可以使用相同的CTE:

DELETE FROM cte WHERE cnt > 1;