我有一张桌子,假设它有四列
Id, Name, Cell_no, Cat_id
。
我需要返回Cat_id
计数大于1
的所有列。
该小组应在Cell_no
和Name
上完成。
到目前为止我做了什么..
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
答案 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