2017-05-24 3 views
1

これは、DB構造クエリは、年と月の両方を手配

あるenter image description here

USE [Fiefo] 
GO 
/****** Object: UserDefinedFunction [dbo].[practicefunc] Script Date: 05/24/2017 16:46:37 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER function [dbo].[practicefunc] 
(@startdate varchar(50), @enddate varchar(50), @userid varchar(50)) 
Returns Table 
As 
Return(select count(Activity.act_id) as TotalActivities ,count(Contact.c_id) as TotalContact , 
MONTH(Activity.added_on) as [Month], 
     Year(Activity.added_on) as [Year] 
from Activity 
INNER JOIN Contact 
ON Activity.ref_id=Contact.c_id 

WHERE Activity.added_on >= @startdate and Activity.added_on <= @enddate 
AND  Activity.added_by = @userid 

GROUP BY MONTH(Activity.added_on),Year(Activity.added_on)) 

このクエリの結果です:カテゴリが= 'FOLを追加する場所

enter image description here

今私は、そのカウントの活動をフォローアップの別の列を追加するには-act_id月と年に応じてカウントアップを行います。 これをどのように達成できますか?

+0

編集あなたのコードは、完全なクエリ – kevin

答えて

0

あなたのフィルタを用いて1または0の列を計算し、このように、この列を合計することができます:Ctrl + Kキーを使用して

select count(Activity.act_id) as TotalActivities ,count(Contact.c_id) as TotalContact , MONTH(Activity.added_on) as [Month], Year(Activity.added_on) as [Year], 
sum(CASE WHEN Activity.category = 'add follow up' THEN 1 ELSE 0 END) as ComputedColumn 
from Activity INNER JOIN Contact ON Activity.ref_id=Contact.c_id 

WHERE Activity.added_on >= @startdate and Activity.added_on <= @enddate AND Activity.added_by = @userid 

GROUP BY MONTH(Activity.added_on),Year(Activity.added_on) 
+0

その助けを書くが、私はカウントしたいですactidはselect countのようなアクティビティを実行し、categoryはfollowからupに等しいアクティビティからcount act idを選択します –

+0

私の英語は申し訳ありませんが、カテゴリーはフォローアップと同じですか? 「フォローアップ」というカテゴリがありますか?その場合、条件をwhereステートメントに入れることはできません。これは、すべての行をフィルターに掛けるためです。 CASEステートメントを使用すると、行をフィルタリングせずにそのカテゴリのすべての行がカウントされます。それは何が間違っていますか? –

+0

categoryは、アクティビティ表内の列で、「addfollowup」が1つある列です。だから私はカウントしたい(act_id)とgroupby月の年。また、再び(act_id)groupby month year category = 'addfollowup'。その月に何回addfollowup –