将列更新为另一列中特定值的COUNT行.SQL Server

Kap*_*tah 6 sql-server

我的表是:

|ID |data | cr |
| 1 | AAA |    |
| 2 | AAA |    |
| 3 | AAA |    |
| 4 | BBB |    |
| 5 | CCC |    |
| 6 | BBB |    |
Run Code Online (Sandbox Code Playgroud)

我需要结果:

|ID |data | cr |
| 1 | AAA | 3  |
| 2 | AAA | 3  |
| 3 | AAA | 3  |
| 4 | BBB | 2  |
| 5 | CCC | 1  |
| 6 | BBB | 2  |
Run Code Online (Sandbox Code Playgroud)

发现此 更新列值为同一表中特定值的COUNT行并尝试过:

UPDATE MyTbl a, 
        (SELECT data,COUNT(*) cnt 
            FROM MyTbl 
          GROUP BY data) b
    SET a.cr = b.cnt 
  WHERE a.data= b.data
Run Code Online (Sandbox Code Playgroud)

SQL Server给出错误:

Msg 102, Level 15, State 1, Line 1 Incorrect syntax near 'a'.
Msg 102, Level 15, State 1, Line 4 Incorrect syntax near 'b'.
Run Code Online (Sandbox Code Playgroud)

知道如何在SQL Server(2014 Express)中执行此操作.

提前致谢.

Rag*_*ull 5

它应该是Update..set...from.试试这个:

update a
set a.cr=b.cnt
from MyTbl a join
     (SELECT data,COUNT(*) cnt 
            FROM MyTbl 
          GROUP BY data) b on a.data=b.data
Run Code Online (Sandbox Code Playgroud)

结果:

ID  data    cr
--------------
1   AAA     3
2   AAA     3
3   AAA     3
4   BBB     2
5   CCC     1
6   BBB     2
Run Code Online (Sandbox Code Playgroud)

SQL小提琴中的演示