Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用嵌套和遍历不同的值_Sql Server - Fatal编程技术网

Sql server 使用嵌套和遍历不同的值

Sql server 使用嵌套和遍历不同的值,sql-server,Sql Server,我正在使用MS SQL Server。我有一个名为“佣金”的表格,其中包含客户、日期、类别和佣金金额。我正在尝试按类别统计客户数量 declare @category nvarchar(50) set @category = 'Shirts' select @category , COUNT(*) from ( SELECT SUM(Commission) AS CommTotal, [Real Customer] FROM dbo.Commissions WHE

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

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
我已经找到了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
  • 裤子1420
  • 鞋子342
  • 袜子553
  • 帽子992

如有任何建议,将不胜感激

您可以使用此查询。它将统计每个类别的
[真实客户]
不同值的数量

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
选择类别、计数(不同[真实客户])
来自dbo.佣金
其中【行项目日期】>=转换(日期时间,'2014-10-01',102)和【行项目日期】<转换(日期时间,'2015-10-01',102)
按类别分组

您还可以选择添加一个
where
子句,以将类别的数量限制为您列出的类别。或者按上述方式保留查询以获取所有类别。

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

'-- wrapper  
select distinct category from commissions
第二:我假设客户和类别的组合不是唯一的,但您希望每个类别只统计一次客户

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

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

试试这个:

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
选择类别、计数(不同[真实客户])
佣金
其中([行项目日期]>=转换(日期时间,'2014-10-01',102)
和[行项目日期]<转换(日期时间,'2015-10-01',102))
按类别分组

Albert

您能提供,SQLFIDLE与模式吗?您是否尝试将类别按分组,然后按内部选择和外部选择,并忘记类别变量?我从未使用过SQLFIDLE,因此可能需要一点时间来组合。谢谢您,Albert!它工作得很好。我感谢你的详细解释。