SQL Server:基于两列返回特殊计数列

SQL Server:基于两列返回特殊计数列,sql,sql-server,Sql,Sql Server,我想获取每个“ID”中包含的“代码”计数。考虑一下我想拥有的表: ╔════════╦════════╦══════╗ ║ ID ║ Code ║ Count║ ╠════════╬════════╬══════╣ ║ 111 ║ abcd ║ 2 ║ ║ 111 ║ abcdes ║ 2 ║ ║ 222 ║ dddd ║ 1 ║ ║ 333 ║ ddww1 ║ 3 ║ ║ 333 ║ ddww2 ║ 3 ║ ║

我想获取每个“ID”中包含的“代码”计数。考虑一下我想拥有的表:

╔════════╦════════╦══════╗ ║ ID ║ Code ║ Count║ ╠════════╬════════╬══════╣ ║ 111 ║ abcd ║ 2 ║ ║ 111 ║ abcdes ║ 2 ║ ║ 222 ║ dddd ║ 1 ║ ║ 333 ║ ddww1 ║ 3 ║ ║ 333 ║ ddww2 ║ 3 ║ ║ 333 ║ ddww3 ║ 3 ║ ║ 444 ║ abcde1 ║ 2 ║ ║ 444 ║ abcde2 ║ 2 ║ ╚════════╩════════╩══════╝

MS SQL Server 2008架构设置

CREATE TABLE TABLE1( ID INT,Code VARCHAR(20))
GO
INSERT INTO TABLE1 VALUES

(111,'abcd'),
(111,'abcdes'),
(222,'dddd'),
(333,'ddww1'),
(333,'ddww2'),
(333,'ddww3'),
(444,'abcde1'),
(444,'abcde2')
SELECT A.ID
      ,A.Code 
      ,Sub.CODE_COUNT
FROM TABLE1 A
 INNER JOIN (
             SELECT ID , COUNT(*)  AS CODE_COUNT 
             FROM TABLE1
             GROUP BY ID) Sub
ON A.ID = Sub.ID
|  ID |   CODE | CODE_COUNT |
|-----|--------|------------|
| 111 |   abcd |          2 |
| 111 | abcdes |          2 |
| 222 |   dddd |          1 |
| 333 |  ddww1 |          3 |
| 333 |  ddww2 |          3 |
| 333 |  ddww3 |          3 |
| 444 | abcde1 |          2 |
| 444 | abcde2 |          2 |
查询1

CREATE TABLE TABLE1( ID INT,Code VARCHAR(20))
GO
INSERT INTO TABLE1 VALUES

(111,'abcd'),
(111,'abcdes'),
(222,'dddd'),
(333,'ddww1'),
(333,'ddww2'),
(333,'ddww3'),
(444,'abcde1'),
(444,'abcde2')
SELECT A.ID
      ,A.Code 
      ,Sub.CODE_COUNT
FROM TABLE1 A
 INNER JOIN (
             SELECT ID , COUNT(*)  AS CODE_COUNT 
             FROM TABLE1
             GROUP BY ID) Sub
ON A.ID = Sub.ID
|  ID |   CODE | CODE_COUNT |
|-----|--------|------------|
| 111 |   abcd |          2 |
| 111 | abcdes |          2 |
| 222 |   dddd |          1 |
| 333 |  ddww1 |          3 |
| 333 |  ddww2 |          3 |
| 333 |  ddww3 |          3 |
| 444 | abcde1 |          2 |
| 444 | abcde2 |          2 |

CREATE TABLE TABLE1( ID INT,Code VARCHAR(20))
GO
INSERT INTO TABLE1 VALUES

(111,'abcd'),
(111,'abcdes'),
(222,'dddd'),
(333,'ddww1'),
(333,'ddww2'),
(333,'ddww3'),
(444,'abcde1'),
(444,'abcde2')
SELECT A.ID
      ,A.Code 
      ,Sub.CODE_COUNT
FROM TABLE1 A
 INNER JOIN (
             SELECT ID , COUNT(*)  AS CODE_COUNT 
             FROM TABLE1
             GROUP BY ID) Sub
ON A.ID = Sub.ID
|  ID |   CODE | CODE_COUNT |
|-----|--------|------------|
| 111 |   abcd |          2 |
| 111 | abcdes |          2 |
| 222 |   dddd |          1 |
| 333 |  ddww1 |          3 |
| 333 |  ddww2 |          3 |
| 333 |  ddww3 |          3 |
| 444 | abcde1 |          2 |
| 444 | abcde2 |          2 |