2016-06-21 70 views
0

我有三列的表:子查询集团按月和

id (nvarchar) 
time (datetime) 
description (nvarchar) 

,并要计算的以下数量:

SELECT 
(
(SELECT CAST(COUNT(DISTINCT id) as float) 
FROM [table] 
WHERE description = 'x' 
)/
(
(SELECT CAST(COUNT(DISTINCT id) as float) 
FROM [table]) 
) 
AS quotient 

有没有一种方法来计算每个此相同的商月份和年份,而不是整个表格?我在最后尝试了GROUP BY MONTH(time) + YEAR(time),但得到的错误是:

多部分标识符无法绑定。

+0

邮政查询您遇到麻烦,*确切*错误消息,并且最好,一些例如输入/输出。 – Blorgbeard

回答

1

试试这个:

SELECT YEAR(time), MONTH(time), 
     COUNT(DISTINCT CASE WHEN description = 'x' THEN id END)/
     (COUNT(DISTINCT id) * 1.0) AS quotient 
FROM [table] 
GROUP BY YEAR(time), MONTH(time) 
+0

这几乎可以工作,但我认为它重复了一些出现在多个月的ID,因为如果我运行我的原始查询,聚合总数与我得到的数据不匹配。是否有可能只计算每个ID的第一个实例?所以只保留每个ID的最短时间。 – learningAsIGo