2011-04-16 16 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 

を同じテーブルの2つの列を照会する方法をどのように私は私がこのGROUPBYと2つの条件で

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); 

で試してみました

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

を表現するSQL Server 2008のこのような結果を表示することができます間違ったresult.AnyヘルプPLZ。

+0

だから**あなたは何を得ますか?!!?!? –

答えて

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 many。 – Anik

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'のための' END'を閉じることができません。 –

0

あなたはほぼそこにいました。 GROUP BYによって処理されるので、COUNT(ID)の副選択は必要ありません。あなたは日付でグループ分けするので、カウントは各日付内のIDの数になります。あなたが同じIDの複数の登録を1日に持つことができる場合に備えて、私は数を区別しました。

あなたのサブクエリはほぼ正しいです - 同じ登録日の行を選択することで、メインクエリと関連付ける必要があります。

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

あなたのクエリで 'TotalChurn'の2倍を続けています... –

関連する問題