假设有一个结果集......我需要像这样打印出来:
ID Count
1 5
1 5
1 5
1 5
1 5
2 2
2 2
3 1
提前致谢。
您可以使用count()
withOVER
子句:
select a, count(*) over (partition by a) as [count]
from tableName ;
它被称为窗口函数。我建议你研究这些。
你的意思是你的查询:
SELECT ID, COUNT(*) AS "Count"
FROM tableX
GROUP BY ID ;
产生这个:
ID Count
1 5
2 2
3 1
但你想要这个?:
ID Count
1 5
1 5
1 5
1 5
1 5
2 2
2 2
3 1
然后,此查询将执行以下操作:
SELECT grp.ID, grp."Count"
FROM
tableX AS t
JOIN
( SELECT ID, COUNT(*) AS "Count"
FROM tableX
GROUP BY ID
) AS grp
ON grp.ID = t.ID ;
它适用于几乎所有 DBMS 和所有版本的 SQL-Server。对于 SQL-Server 2005 和更新版本(以及在 Oracle 和 Postgres 中),带有OVER
子句的答案看起来更优雅,可能更受欢迎。在您的版本中测试哪个更有效。我认为在 2012 版本中,带有OVER
子句的查询非常有效。