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

Posted

技术标签:

【中文标题】SQL Server:基于两列返回特殊计数列【英文标题】:SQL Server: Return Special Count Column based on two Columns 【发布时间】:2014-03-19 20:17:17 【问题描述】:

我想获取每个“ID”中包含的“代码”计数。考虑一下我想要的这张桌子:

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

如您所见,它返回每个 ID 中的代码数。

我在想这样的事情......但它不起作用:

SELECT COUNT(CODE) AS CODE_COUNT FROM TABLE1 a, TABLE1 b WHERE a.ID=b.ID;

【问题讨论】:

【参考方案1】:

SQL Fiddle

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')

查询 1

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

Results

|  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 |

【讨论】:

以上是关于SQL Server:基于两列返回特殊计数列的主要内容,如果未能解决你的问题,请参考以下文章

sql server 中返回两列中值中比较大的一个

基于sql中的第三列返回两列的所有组合

sql:选择由另一列分组的两列值的计数并获得两个计数的比率

ACCESS有一个表,我想根据A列或是C列两列数据中的任意数据进行查询,怎么创建查询? 哪位高人可以指点下

用于计数和显示(列中的不同值)的 Sql 查询优化,按其他两列分组

如何将两列转换为用于计数矢量化的序列?