3
我有一个查询,返回ID,名称和ID已输入到表中的次数计数。
SELECT
ID,
NAME,
COUNT(*) count
FROM
TABLE
GROUP BY
NAME, ID, CASE_DETAIL_ID
HAVING
COUNT(*) > 1;
返回以下数据:
一些示例数据会有所帮助,但您可以使用CTE,select
最低,使用min()
,如下所示:
WITH x AS(
SELECT t.id, t.nametext, COUNT(*) as count
FROM table t
GROUP BY id, t.nametext, CASE_DETAIL_ID
), y as(
SELECT x.id, MIN(x.[COUNT]) as mincount
FROM x
GROUP BY x.id
)
select y.id, x.nametext, y.mincount
from y
join x
on x.[COUNT] = y.mincount
and x.id = y.id
也可以这样用top 1
和order by
来完成:
SELECT TOP 1 id, name, COUNT(*) as count
FROM TABLE
WHERE ID = 123
GROUP BY NAME, ID, CASE_DETAIL_ID
ORDER BY count DESC
但是请记住,由于这只会select
第一行,因此这只适用于where
子句,因为它总是只返回1行。
而如果你使用CTE选项,它也可以工作,如果你想要每个id,没有where id = 123
。