按两列分组时计算总数

时间:2014-12-17 13:40:55

标签: sql sql-server count sql-server-2008-r2 group-by

我有一张包含以下信息的表格:

--------------------------------------
| client_name | supplier | completed |
--------------------------------------
| Acme_1      | Sup_1    | 0         |
| Acme_1      | Sup_1    | 0         |
| Acme_1      | Sup_1    | 1         |
| Acme_1      | Sup_2    | 0         |
| Acme_1      | Sup_1    | 1         |
| Acme_1      | Sup_1    | 0         |
| Acme_2      | Sup_1    | 0         |
| Acme_2      | Sup_1    | 0         |
| Acme_2      | Sup_3    | 0         |
| Acme_1      | Sup_1    | 1         |
| Acme_3      | Sup_2    | 0         |
| Acme_2      | Sup_3    | 0         |
--------------------------------------

我需要的是一个显示Sup_x提供给Acme_x的次数的结果。因此,对于上表,我需要一个概述,如下所示:

--------------------------------------
| supplier | client_name | total     |
--------------------------------------
| Sup_1    | Acme_1      | 6         |
| Sup_1    | Acme_2      | 2         |
| Sup_2    | Acme_1      | 1         |
| Sup_2    | Acme_3      | 1         |
| Sup_3    | Acme_2      | 2         |
--------------------------------------

但我完全迷失了。我正在尝试DISTINCTGROUP BY。但我甚至没有接近我需要的东西。例如:

SELECT 
      [supplier]
      ,[client_name]
      ,COUNT([client_name]) AS total
  FROM data
  GROUP BY 
      [client_name]
      --,[supplier]

但是这个查询并没有真正提供我需要的东西。

我需要什么查询来获得所需的resukt?

3 个答案:

答案 0 :(得分:2)

试试这个:

SELECT [supplier], [client_name], COUNT(1) AS total
FROM data
GROUP BY [supplier], [client_name];

答案 1 :(得分:0)

如果您将COUNT([client_name])更改为COUNT(*)

,该怎么办?
SELECT 
[supplier]
,[client_name]
,COUNT(*) AS total
FROM data
GROUP BY 
[client_name],[supplier]

答案 2 :(得分:0)

应该如下:

选择       [供应商]       ,[客户名称]       ,COUNT([已完成])总计   来自数据   GROUP BY [client_name],[supplier]

说明:

  • “Group By”子句将仅返回select语句中所选列的不同行集。阅读更多here
  • 计数将仅计算指定[supplier],[client_name]集的行数。

如果您需要更多帮助或澄清,请随时与我联系