按客户计算项目数,以及SQL Server 2014

时间:2017-05-14 17:40:26

标签: sql-server

我有一个包含销售数据的表,表中的列是客户ID,物料ID,数量,价格和物料类型。

例如:

Customer_ID|Item_ID|Quantity|Price|Item_Type

 1. 1001|001|25|33.50|A
 2. 1001|006|10|2.75|X
 3. 1001|153|32|45.10|B
 4. 1001|101|2|256.00|Y
 5. 1002|006|22|2.75|X
 6. 1002|033|10|33.50|V
 7. 1002|026|17|19.50|Z
...
  • 每件商品只能有一种商品类型。

我需要提取所有不同的客户ID以及他们购买的商品数量,一个字段中属于特定商品类型的商品数量以及属于该商品数量的商品数量另一个字段中的另一个项目类型。 例如,假设我有客户ID为1001的客户'John'的4条记录。我需要计算'John'购买的所有商品的数量,这可以说数字4.然后我需要计算所有商品具有特定项目类型的项目。因此,让我们说出这4个项目,我需要计算所有记录,其中包含'A'或'B'作为项目类型,这应该拉出2个具有这些标签的项目。然后在另一个领域,我需要拉出除“A”和“B”之外的其他项目类型的所有项目的计数,这应该拉高2.如果没有“A”或“B”的客户的项目'然后该行可以是'空'或'0'。 所以我的输出应该是这样的:

Customer_ID|Count_of_Items|Count_of_AB_Item_Type|Count_of_Other_Item_Type
 1. 1001|4|2|2
 2. 1002|3|Null|3
 3. 1003|156|156|Null
 4. 1004|65|20|45
 5. 1005|10|8|2

1 个答案:

答案 0 :(得分:0)

您可以使用聚合函数中的case进行此条件聚合:

select customer_id,
    count(*) as Count_of_Items,
    count(case when Item_Type in ('A', 'B') then 1 end) as Count_of_AB_Item_Type,
    count(case when Item_Type not in ('A', 'B') then 1 end) as Count_of_Other_Item_Type
from your_table
group by customer_id;