2011-04-16 100 views
0
Table :tbl_user 
dateofregistration ID  registrationstate 
6-03-11    3   0 
6-03-11    1   0 
6-03-11    2   1 
7-03-11    2   1 
7-03-11    1   1 

我怎么能显示导致这样的SQL Server 2008 Express的如何查询同一个表的两个列有两个条件与GROUPBY

date  TotalID(count)   Total State(0 only) 
6-03-11  3       2 
7-03-11  2       0 

我试图与这

SELECT CONVERT(varchar(10), dateofregistration, 103) AS Date, 
(select COUNT(ID)) AS Subbase, 
(Select Count(ID)from tbl_User where (registrationstate='0')) AS Totalchurn 
FROM tbl_User 
GROUP BY CONVERT(varchar(10), dateofregistration, 103); 

但错误的结果。任何帮助PLZ。

+0

所以**你得到什么**?!?!?? – 2011-04-16 14:26:07

回答

0

怎么样;

select 
    cast(dateofregistration as date), 
    count(distinct id), --or * for all 
    sum(
     case registrationstate when '0' then 1 else 0 end 
    ) 
from tbl_user 
    group by cast(dateofregistration as date) 
    order by 1 


2011-06-03 3 2 
2011-07-03 2 0 
+0

ooh fantastic.Thanks很多。 – Anik 2011-04-18 18:17:34

0
SELECT CONVERT(varchar(10), dateofregistration, 103) AS Date, 
COUNT(1) AS Subbase, 
SUM(CASE WHEN registrationstate='0' THEN 1 ELSE 0 END) AS Totalchurn 
FROM tbl_User 
GROUP BY CONVERT(varchar(10), dateofregistration, 103) 
ORDER BY 1 
+0

您正在为'CASE' – 2011-04-16 14:32:30

0

你快到了。您不需要为COUNT(ID)选择子查询,因为这是由GROUP BY处理的。您按日期进行分组,因此计数将是每个日期内的ID数量。我已将计数设置为不同,以防万一您可以在一天内注册多个相同的ID。

您的子查询几乎是正确的 - 它需要通过选择具有相同注册日期的行与主查询相关联。

SELECT CONVERT(varchar(10), dateofregistration, 103) AS Date, 
COUNT(DISTINCT ID) AS TotalID, 
(Select Count(*) from tbl_User t2 where (registrationstate='0') AND t2.registrationdate=t1.registrationdate) AS Totalchurn 
FROM tbl_User t1 
GROUP BY CONVERT(varchar(10), dateofregistration, 103); 
+0

'END'缺少一个结束符号,我一直对'TotalChurn'进行两次“2”查询...... – 2011-04-16 14:34:12