2016-11-21 11 views
1

私のテーブルには、訪問数、訪問日、タイプ、訪問者数に関するデータが含まれています。以下のような私のクエリを見SQLリクエスト(合計と複数の場合)条件

|DateMonth | Nb_Visit_Extern | Nb_Visitors_Extern | Nb_Visit_Intern | Nb_Visitors_Intern | 
05-2015  1     3     0     0 
09-2015  1     10     2     8 

:私はこのような何かを出力として持ちたい

| Date_Visit | Type | Nb_Visitors | 
04-05-2015 Intern 3 
08-09-2015 Extern 10 
13-09-2015 Intern 2 
17-09-2015 Intern 6 
    ...  ...  ... 

:それは次のようになります

SELECT CONVERT (VARCHAR(7), [Date_Visit], 20) As DateMonth, 
COUNT(*) Nb_Visit_Extern, 
SUM(Nb_Visitors) Nb_Visitors_Extern 
From MyTable 
Where [Type] = 'Extern' 
GROUP BY CONVERT (VARCHAR(7), [Date_Visit], 20) 
ORDER BY CONVERT (VARCHAR(7), [Date_Visit], 20) ASC 

SELECT CONVERT (VARCHAR(7), [Date_Visit], 20) As DateMonth, 
COUNT(*) as Nb_Visit_Intern, 
SUM(Nb_Visitors) as Nb_Visitors_Intern 
From MyTable 
Where [Type] = 'Intern' 
GROUP BY CONVERT (VARCHAR(7), [Date_Visit], 20) 
ORDER BY CONVERT (VARCHAR(7), [Date_Visit], 20) ASC 

私はCASE条件を使用しようとしたが、それSUMステートメントでは機能しませんでした。 どうすればいいですか?

答えて

1

ようcase表現を使用する必要があります。

SELECT CONVERT (VARCHAR(7), [Date_Visit], 20) As DateMonth, 
COUNT(case when Type = 'Extern' then 1 else 0 end) Nb_Visit_Extern, 
SUM(case when Type = 'Extern' then [Nb_Visitors] else 0 end) Nb_Visitors_Extern, 
COUNT(case when Type = 'Intern' then 1 else 0 end) Nb_Visit_Intern, 
SUM(case when Type = 'Intern' then [Nb_Visitors] else 0 end) Nb_Visitors_Intern 
GROUP BY CONVERT (VARCHAR(7), [Date_Visit], 20) 
ORDER BY CONVERT (VARCHAR(7), [Date_Visit], 20) ASC 
+0

問題が見つかった場合は、私に言います。議論するのは楽しいです。 –

0

あなたは、単純なカウントとSQLのSum関数を使用することができます

SUM(case when Type = 'Extern' then 1 else 0 end) as Nb_Visitors_Extern