如何获取匹配行的计数并将其更新到表中?

时间:2017-06-29 10:49:08

标签: sql sql-server tsql

提前谢谢。

我有一个table1:

ID   ||   Values1   ||   Values2 ||
1    ||   ABC0001   ||    layer1 ||
2    ||   ABC0001   ||    layer1 ||
3    ||   ABC0001   ||    layer1 ||
4    ||   ABC0001   ||    layer1 ||
5    ||   ABC0001   ||    layer1 ||
6    ||   ABC0001   ||    layer1 ||
7    ||   ABC0001   ||    layer1 ||
8    ||   ABC0001   ||    layer1 ||
9    ||   ABC0002   ||    layer1 ||
10   ||   ABC0002   ||    layer1 ||
11   ||   ABC0002   ||    layer1 ||
12   ||   ABC0002   ||    layer1 ||

我需要找到 Values1 的独特计数并更新。 (列 values1 的计数不会超过12)

此表中只有12条记录。对于Exmaple,如果它只有一个 values1 的特定集合,如 ABC0001 那么它应该给我数为12并将其更新为新行,但如果它们不止一个(ABC0001和ABC0002) Values1 那么它应该给我单独计算 values1

输出:

表2:

 values1   ||   Count
 ABC0001   ||   8
 ABC0002   ||   4

我尝试使用case语句但是无法做到。

我正在使用MSSQL 2012 提前谢谢。

3 个答案:

答案 0 :(得分:1)

使用GROUP BY子句:

SELECT Values1 , COUNT(Values1)
FROM your_table
GROUP BY Values1 

答案 1 :(得分:1)

下面你可以找到完整的答案,更新另一张表:

-- insert output into temp table
SELECT Values1 , COUNT(Values1) as Count
into #temp
FROM your_table
GROUP BY Values1 
GO

-- update second table based on values from above output
update b
set Count = t.Count
from your_table2 b
    inner join #temp t
    on b.Values1 = t.Values1

-- drop temp table
drop table #temp

答案 2 :(得分:1)

使用窗口功能我们可以得到结果

SELECT DISTINCT Values1,
     COUNT(Values2) OVER(PARTITION BY Values1) As COUNTS 
FROM YourTablename

结果

Values1 COUNTS
--------------
ABC0001 8
ABC0002 4
相关问题