使用嵌套总和迭代不同的值

时间:2015-12-05 23:20:54

标签: sql-server

我正在使用MS SQL Server。我有一个名为“佣金”的表,其中包含客户,日期,类别和佣金金额。我试图按类别获得客户数量。

我已经找到了SQL代码,它为我提供了单个类别的总客户数。

declare @category nvarchar(50)
set @category = 'Shirts'

select @category , COUNT(*) 
from (
SELECT     SUM(Commission) AS CommTotal, [Real Customer]  
FROM         dbo.Commissions
WHERE     category = @category and ([Line Item Date] >= CONVERT(DATETIME, '2014-10-01', 102) AND [Line Item Date] < CONVERT(DATETIME, '2015-10-01', 102))
GROUP BY [Real Customer]
) as Agg

此代码的输出产生

衬衫652

我接下来要做的是相当于在这段代码周围添加一个包装器,这将为我提供所有5个类别的客户数。

'-- wrapper  
select distinct category from commissions
  • 衬衫652
  • 裤子1420
  • 鞋子342
  • 袜子553
  • 帽子992

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用此查询。它将计算每个类别[Real Customer]的不同值的数量。

SELECT category, COUNT(DISTINCT [Real Customer]) 
FROM dbo.Commissions
WHERE [Line Item Date] >= CONVERT(DATETIME, '2014-10-01', 102) AND [Line Item Date] < CONVERT(DATETIME, '2015-10-01', 102)
GROUP BY category

您还可以选择添加where子句,以便根据需要将类别数量限制为您列出的类别数量。或者保留上面的查询以获取所有类别。

答案 1 :(得分:0)

首先:在您的代码中,您选择的是一个类别。在输出示例中,您需要所有类别。所以必须删除选择。

第二:我假设客户和类别的组合不是唯一的,但您希望每个类别只计算一次客户。

第三:我正在复制您的日期选择。

您需要按类别进行分组,然后计算每个客户只计算一次客户的客户数量。

试试这个:

select category, count(distinct [Real Customer])
from Commissions
where ([Line Item Date] >= CONVERT(DATETIME, '2014-10-01', 102) 
and [Line Item Date] < CONVERT(DATETIME, '2015-10-01', 102))
group by Category

阿尔伯特