1

假设有一个结果集......我需要像这样打印出来:

ID  Count
1    5
1    5 
1    5
1    5
1    5
2    2
2    2
3    1

提前致谢。

4

2 回答 2

8

您可以使用count()withOVER子句

select a, count(*) over (partition by a) as [count]
from tableName ;

它被称为窗口函数。我建议你研究这些。

于 2012-08-01T21:09:07.873 回答
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子句的查询非常有效。

于 2012-08-01T21:09:24.923 回答