如何根据一组多列的特定值获取列的COUNT?

时间:2016-12-14 05:46:22

标签: sql sql-server count

+------+-------+-------+---------+---------+
| R_ID |   BU  |  DIV  | Product | C_Func  |
+------+-------+-------+---------+---------+
|  1   |  BU1  | Div1  |   P1    |  Dev    |
|  2   |  BU2  | Div2  |   P2    |  Dev    |
|  3   |  BU2  | Div2  |   P2    |  BA     |
|  4   |  BU3  | Div3  |   P3    |  Dev    |
|  5   |  BU3  | Div3  |   P3    |  QA     |
|  6   |  BU4  | Div4  |   P4    |  Dev    |
|  7   |  BU4  | Div4  |   P4    |  QA     |
|  8   |  BU4  | Div4  |   P4    |  BA     |
|  9   |  BU1  | Div1  |   P1    |  Dev    |
|  10  |  BU2  | Div2  |   P2    |  Dev    |
|  11  |  BU2  | Div2  |   P2    |  BA     |
|  12  |  BU3  | Div3  |   P3    |  Dev    |
|  13  |  BU3  | Div3  |   P3    |  QA     |
|  14  |  BU4  | Div4  |   P4    |  Dev    |
|  15  |  BU4  | Div4  |   P4    |  QA     |
|  16  |  BU4  | Div4  |   P4    |  BA     |
|  17  |  BU3  | Div3  |   P3    |  QA     |
|  18  |  BU4  | Div4  |   P4    |  Dev    |
|  19  |  BU4  | Div4  |   P4    |  QA     |
|  20  |  BU4  | Div4  |   P4    |  BA     |
+------+-------+-------+---------+---------+

我有一个表中的数据,如上所示,我使用sql连接和all获取。 我想要的是工作在(BU,DIV,Product,C_func)上的'R_ID'的计数。 例如 我想知道(BU1,Div1,P1,Dev)有多少'R_ID',因为该计数应为2,因为该集合有两个条目(BU1,Div1,P1,Dev)。

预期产出:

 +-------+-------+---------+---------+-------+
 |   BU  |  DIV  | Product | C_Func  | Count |
 +-------+-------+---------+---------+-------+
 |  BU1  | Div1  |   P1    |  Dev    |   2   |
 |  BU2  | Div2  |   P2    |  Dev    |   2   |
 |  BU2  | Div2  |   P2    |  BA     |   2   |
 |  BU3  | Div3  |   P3    |  Dev    |   2   |
 |  BU3  | Div3  |   P3    |  QA     |   3   |
 |  BU4  | Div4  |   P4    |  Dev    |   3   |
 |  BU4  | Div4  |   P4    |  QA     |   3   |
 |  BU4  | Div4  |   P4    |  BA     |   3   |       
 +-------+-------+---------+---------+-------+

请帮帮我。 提前谢谢。

6 个答案:

答案 0 :(得分:1)

你可以这样做:

select   BU, DIV, Product, C_Func, count(*)
from     mytable
group by BU, DIV, Product, C_Func

答案 1 :(得分:1)

这是一个简单的GROUP BY场景。

SELECT BU,DIV,Product,C_Func,COUNT(R_ID)
FROM YOURTABLE
GROUP BY BU,DIV,Product,C_Func

您需要group by要将其视为群组的所有列,并在左侧列中应用count

答案 2 :(得分:0)

SELECT BU,DIV,Product,C_Func,COUNT(*)
FROM YOURTABLE
GROUP BY BU,DIV,Product,C_Func

答案 3 :(得分:0)

根据R_ID的唯一性,有两种替代方法。如果它被定义为 UNIQUE INDEX ,那么您可以简单地将行计为:

SELECT BU1 , COUNT(*)
  FROM YourTable
 GROUP BY BU1   ;

如果定义为 UNIQUE INDEX ,并且您想知道有多少不同的索引,那么查询将变为:

SELECT BU1 , COUNT(DISTINCT R_ID)
  FROM YourTable
 GROUP BY BU1   ;

相同类型的查询可用于其他列。

答案 4 :(得分:0)

试试这个:

select   BU, DIV, Product, C_Func, count(1)
from     table
group by BU, DIV, Product, C_Func

答案 5 :(得分:0)

;WITH tb(R_ID,BU,DIV,Product,C_Func)AS(
    SELECT 1,'BU1','Div1','P1','Dev' UNION ALL
    SELECT 2,'BU2','Div2','P2','Dev' UNION ALL
    SELECT 3,'BU2','Div2','P2','BA' UNION ALL
    SELECT 4,'BU3','Div3','P3','Dev' UNION ALL
    SELECT 5,'BU3','Div3','P3','QA' UNION ALL
    SELECT 6,'BU4','Div4','P4','Dev' UNION ALL
    SELECT 7,'BU4','Div4','P4','QA' UNION ALL
    SELECT 8,'BU4','Div4','P4','BA' UNION ALL
    SELECT 9,'BU1','Div1','P1','Dev' UNION ALL
    SELECT 10,'BU2','Div2','P2','Dev' UNION ALL
    SELECT 11,'BU2','Div2','P2','BA' UNION ALL
    SELECT 12,'BU3','Div3','P3','Dev' UNION ALL
    SELECT 13,'BU3','Div3','P3','QA' UNION ALL
    SELECT 14,'BU4','Div4','P4','Dev' UNION ALL
    SELECT 15,'BU4','Div4','P4','QA' UNION ALL
    SELECT 16,'BU4','Div4','P4','BA' UNION ALL
    SELECT 17,'BU3','Div3','P3','QA' UNION ALL
    SELECT 18,'BU4','Div4','P4','Dev' UNION ALL
    SELECT 19,'BU4','Div4','P4','QA' UNION ALL
    SELECT 20,'BU4','Div4','P4','BA'
    )
    SELECT BU,DIV,Product,C_Func,COUNT(DISTINCT R_ID) AS [R_ID_Count] 
    FROM tb GROUP BY BU,DIV,Product,C_Func
BU   DIV  Product C_Func R_ID_Count
---- ---- ------- ------ -----------
BU1  Div1 P1      Dev    2
BU2  Div2 P2      BA     2
BU2  Div2 P2      Dev    2
BU3  Div3 P3      Dev    2
BU3  Div3 P3      QA     3
BU4  Div4 P4      BA     3
BU4  Div4 P4      Dev    3
BU4  Div4 P4      QA     3