我正在使用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
任何建议将不胜感激。
答案 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
阿尔伯特