使用GROUP BY时需要从表中返回所有列

时间:2012-05-28 06:24:32

标签: sql-server tsql

我有一张桌子,假设它有四列 Id, Name, Cell_no, Cat_id。 我需要返回Cat_id计数大于1的所有列。

该小组应在Cell_noName上完成。 到目前为止我做了什么..

select Cell_no, COUNT(Cat_id)
from TableName
group by Cell_Number
having COUNT(Cat_id) > 1

但我需要的是这样的事情。

select * 
from TableName
group by Cell_Number
having COUNT(Cat_id) > 1

3 个答案:

答案 0 :(得分:1)

您只需修改您的查询,如下所示 -

select * from tableName where (Cell_no, Name) in (
          select Cell_no, Name from TableName
           Group by Cell_no , Name
           having COUNT(Cat_id) > 1
           )

如所讨论的那样你想要按Cell_no和Name进行分组..如果是这样你需要按列更改你的查询并选择部分..正如我所提到的那样

答案 1 :(得分:1)

此版本只需要传递一次数据:

SELECT *
FROM   (SELECT a.*
              ,COUNT(cat_id) OVER (PARTITION BY cell_no)
               AS count_cat_id_not_null
        FROM   TableName a)
WHERE  count_cat_id_not_null > 1;

答案 2 :(得分:1)

Pratik的答案很好但不是使用IN运算符(仅适用于单个值),您需要JOIN返回结果集

SELECT t.* 
FROM tableName t
INNER JOIN      
    (SELECT Cell_no, Name 
    FROM TableName
    GROUP BY Cell_no , Name
    HAVING COUNT(Cat_id) > 1) filter
    ON t.Cell_no = filter.Cell_no AND t.Name = filter.Name