2013-05-02 42 views
-1

我的表是这样的.....TSQL,删除基于行指数排


**AttName**  **Title**  **Count_Index** 

Red    Boys    1 
Red    Girls    2 
Green    Boys    1 
Blue    Boys    1 

我只想要回...因为我

Red Boys  1 
Red Girls  2 

那有两个条目的红色,我想跳过/删除所有的行,如果他们的计数是只有1.换句话说,我只对行的兴趣,如果他们的计数超过“1”。

+1

是'Count'一个字段,或使用聚合函数计算次数? – 2013-05-02 22:34:50

+0

其驱动列使用row_number()函数 – highwingers 2013-05-02 22:36:53

+0

为什么人们会把它投下来。 – highwingers 2013-05-02 22:50:08

回答

2

尝试

SELECT * 
    FROM table1 
WHERE AttName IN (SELECT AttName FROM table1 GROUP BY AttName HAVING COUNT(*) > 1) 

SQLFiddle

输出

| ATTNAME | TITLE | COUNT_INDEX | 
--------------------------------- 
|  Red | Boys |   1 | 
|  Red | Girls |   2 | 
0

好的,这是测试。在寻找重复项目时,我喜欢使用窗口功能。特别是因为避免在where子句中进行子选择,并且从同一个表中进行两次。相反,所有需要的列已被拉入子查询中。尽管开窗功能有时可能很昂贵。

Select *, ROW_NUMBER() over (Partition by AttrName Order By AttrName) --probably better to order by whatever the primary key is for consistent results, esepcially if you plan to use this in a delete statement 
From (
    SELECT AttName, title, COUNT(AttrName) over (partition by AttrName) as cnt 
    FROM yourtable 
) as counted 
Where counted.cnt > 1 
+0

为什么'计数(*)'而不是'计数(AttName)',因为它是唯一重要的计数... – phadaphunk 2013-05-02 22:40:05

+1

而他希望列'AttName','Title'和'Count_indes'的事实如何结果 ? – phadaphunk 2013-05-02 22:41:55

+1

@PhaDaPhunk不同之处在于您是否需要计算空值。根据反馈更新了查询,谢谢。查看http://stackoverflow.com/questions/3003457/count-vs-countcolumn-name-which-is-more-correct – AaronLS 2013-05-02 22:54:01