在SQL Server 2008中,如何计算不同值的行

时间:2013-02-06 13:09:01

标签: sql-server sql-server-2008

表结构和数据是:

col a     col c count
107       0
107       0
107       0 
107       0
108       0

我可以编写哪些select语句来获得此结果? 我想要计算'col a'值的数量。

col a    col c count
107      4
107      4
107      4
107      4
108      1

3 个答案:

答案 0 :(得分:4)

您可以使用count() over()语法:

select cola,
  count(cola) over(partition by cola) CountColC
from yourtable

请参阅SQL Fiddle with Demo

| COLA | COUNTC |
-----------------
|  107 |      4 |
|  107 |      4 |
|  107 |      4 |
|  107 |      4 |
|  108 |      1 |

如果您想使用此数据执行更新,您将使用:

;WITH cte AS
(
    SELECT cola, 
       colc, 
       count(cola) over(partition BY cola) CountC
    FROM yourtable
)
UPDATE cte
SET colc = countc;

请参阅SQL Fiddle with Demo

答案 1 :(得分:2)

你可以用这个:

select tableName.col_a, cnt
from tableName inner join
(
  select col_a, count(col_a) as cnt
  from tableName
  group by col_a
) tmp on tableName.col_a = tmp.col_a

在更新查询中使用此方法:

update tableName set col_a = cnt
from
(
  select col_a, count(col_a) as cnt
  from tableName
  group by col_a
) tmp
where tableName.col_a = tmp.col_a

答案 2 :(得分:1)

如果可以删除重复的条目,这将有效:

SELECT cola, COUNT(1)
FROM TABLE1
GROUP BY cola

这将返回:

    cola    colc
    107     4
    108     1