删除SQL中具有重复列值的行

时间:2014-11-19 18:35:29

标签: sql sql-server tsql

在过去几个小时(子查询,CTE,派生表的左连接)的答案中,我在SO上看起来很高,但这些问题都没有达到我的标准。

我有一个包含这样数据的表:

   COL1  COL2 COL3 
    1     A    0
    2     A    1
    3     A    1
    4     B    0
    5     B    0
    6     B    0
    7     B    0
    8     B    1

其中column1 1是primary key并且是int。第2列为nvarchar(max),第3列为int。我已经确定使用此查询:

select name, COUNT(name) as 'count'
FROM [dbo].[AppConfig]
group by Name
having COUNT(name) > 3

只有当C列出现次数超过3次时,我才能返回“A,B和C”的总计数。我现在正在尝试删除在第3列的初始值之后出现的所有行。我提供的示例表现在看起来像这样:

   COL1  COL2 COL3 
    1     A    0
    2     A    1
    4     B    0
    8     B    1                

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

这应该有效:

;WITH numbered_rows as (
SELECT
    Col1,
    Col2,
    Col3,
    ROW_NUMBER() OVER(PARTITION BY Col2, Col3 ORDER BY Col3) as row
FROM AppConfig)
SELECT 
  Col1,
  Col2,
  Col3
FROM numbered_rows
WHERE row = 1

答案 1 :(得分:0)

如果您想要的只是ColB-ColC组合的第一行,则以下内容将执行此操作:

select min(id) as id, colB, colC
from tbl
group by colB, colC
order by id

SQL Fiddle

答案 2 :(得分:0)

SELECT DISTINCT MIN(COL1) AS COL1,COL2,COL3 
FROM TABLE
GROUP BY  COL2,COL3
ORDER BY COL1