2

表结构和数据为:

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

我可以写什么选择语句来得到这个结果?我想计算“col a”值的数量。

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

3 回答 3

4

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

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

请参阅带有演示的 SQL Fiddle

| 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

于 2013-02-06T13:15:51.797 回答
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
于 2013-02-06T13:14:04.477 回答
1

如果可以删除重复的条目,这将起作用:

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

这将返回:

    可乐可乐
    107 4
    108 1
于 2013-02-06T13:13:29.893 回答