假设有一个结果集......我需要像这样打印出来:
ID Count
1 5
1 5
1 5
1 5
1 5
2 2
2 2
3 1
提前致谢。
答案 0 :(得分:8)
您可以将count()
与 OVER
clause :
select a, count(*) over (partition by a) as [count]
from tableName ;
它被称为窗口功能。我建议你研究这些。
答案 1 :(得分:8)
你的意思是你的查询:
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
子句的查询非常有效。