2017-04-12 5 views
-1
DECLARE @from_date DATETIME, 
     @Monthnos INT 

SET @From_Date='2016-04-01' 
SET @Monthnos=1 

SELECT dmcode, 
     CASE 
     WHEN entitystatus IN ('Active') 
       AND CONVERT(DATE, codedate, 103) BETWEEN Dateadd(dd, Datediff(dd, 
                    Datepart(dd, 
                 Dateadd(m, monthnos, 
                 @from_date)), 1), 
        Dateadd(m, monthnos, @from_date)) 
                 AND 
        Dateadd(dd, Datediff(dd, 
           Datepart( 
           dd, 
        Dateadd(m, monthnos, 
        @from_date)), 0), 
                 Dateadd 
                 (m, monthnos, @from_date) 
       ) THEN 
     Sum(agentpartyid) 
     END AS ActiveCount, 
     CASE 
     WHEN entitystatus IN ('Inactive', 'Suspend') 
       AND CONVERT(DATE, codedate, 103) = Dateadd(dd, Datediff(dd, 
                  Datepart(dd, 
                  Dateadd(m, monthnos 
                  , 
                  @from_date)), 0), 
        Dateadd(m, monthnos, @from_date)) 
     THEN Sum(agentpartyid) 
     END AS InActiveCount 
FROM cms_v_agency_dump_master AD WITH (nolock) 
     INNER JOIN #branch_mom BM WITH (nolock) 
       ON AD.dmcode = BM.dm_code 
GROUP BY dmcode, 
      entitystatus, 
      CONVERT(DATE, codedate, 103), 
      monthnos 

私は上記のクエリを持っています。アクティブなエージェントの数とコーディング日付は、毎月のfirst_dayと最後の日の間に必要です。非アクティブまたは中断してから、毎月の最終日に等しい。 ここでMonthnosは財務月です(月が4月の場合はmonthnos = 1、4月の場合はmonthnos = 2のようになります)。 だから、どうすればこれをSQLで実現できますか????SQLで毎月の初日を選択するには

ありがとうございます。あなたはDATETIMEフィールドがmonthnosであると仮定すると、唯一の毎月1日の間で照会したい場合は

+1

[悪い習慣から:日付/時刻操作で短縮形を使用する - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using -shorthand-with-date-time-operations.aspx) – SqlZim

答えて

0

、あなたは簡単に追加することができます。

WHERE DATEDIFF(month, monthnos, GETDATE())=1 
+0

selectステートメントでcaseステートメントを使用しました。 –

0

これは、あなたは月の最初の日を取得するつもり方法です従業員が開始します。開始日を指定するテーブルの日付フィールドにGETDATE()を交換してください。これをそのままコピー&ペーストして、出力がどのように見えるかを知ることができます。

select dateadd(month,datediff(month,0,dateadd(m,0,getdate())),0) 

これは、従業員が解雇された月の最終日を示します。前と同じように、GETDATE()をテーブルの日付フィールドに置き換えます。

select dateadd(s,-1,dateadd(mm,datediff(mm,0,getdate())+1,0)) 

これらは、SELECTステートメント内にあるため、データをプルするときに設定した条件に干渉しないため、便利です。彼らは日付の見方を変えるだけです。あなたが宣言し、もうセットを必要はありません

SELECT dateadd(month,datediff(month,0,dateadd(m,0,GETDATE())),0) AS StartDate, 
     dateadd(s,-1,dateadd(mm,datediff(mm,0,GETDATE())+1,0)) AS EndDate 

FROM cms_v_agency_dump_master AD WITH (nolock) 
     INNER JOIN #branch_mom BM WITH (nolock) 
       ON AD.dmcode = BM.dm_code 
GROUP BY .... 

:ここ

は、クエリがどのように見えるかです。私はGROUP BYを記入するのにあなたのDBに十分に精通していませんが、ここからそれを取ることができます。お役に立てれば!!

関連する問題