2016-07-05 5 views
0

詳細(ステータス、ID、タイトルなど)と開始日と終了日を持つマスターテーブルがあります。現時点で月に有効な情報を必要とします。月次データを取得するStartDateとendDateに基づいてテーブルから

私は月の賢明な記録を与えたが、年を考慮しなかった。テーブル行が増えると、このコードが遅すぎます。私を助けてください。

DECLARE @LoopCounter INT, 
     @Max INT, 
     @MonthName NVARCHAR(100), 
     @TransStatus int, 
     @Year int 
BEGIN 
    SELECT @LoopCounter = min(id), @Max = max(Id) 
    FROM TableName 

    CREATE TABLE #Active 
    (
     Id INT IDENTITY(1,1), 
     Month varchar(30) 
    ) 

    WHILE (@LoopCounter <= @Max) 
    BEGIN 
     INSERT into #Active 
      SELECT DateName(MONTH, DATEADD(MONTH, nos.monthnos, (Select StartDate from TableName where [email protected] And Year(StartDate)[email protected])-1)) 
      FROM (SELECT 1 monthnos 
        UNION SELECT 2 
        UNION SELECT 3 
        UNION SELECT 4 
        UNION SELECT 5 
        UNION SELECT 6 
        UNION SELECT 7 
        UNION SELECT 8 
        UNION SELECT 9 
        UNION SELECT 10 
        UNION SELECT 11 
        UNION SELECT 12) nos 
      WHERE nos.monthnos <= DATEDIFF(MONTH, (Select StartDate from TableName where [email protected]), 
                (Select EndDate from TableName where [email protected])+1) 
     SET @LoopCounter = @LoopCounter + 1 
    END 
END 

SELECT COUNT(*) As ActiveCount, Month 
FROM #Active 
GROUP BY Month 
+2

データを挿入するためにループを使用しています。それが遅すぎるのも不思議ではありません。おそらく、もしあなたがそのコードが何をしているのかを説明することができれば、集合に基づくアプローチを見つけるのを助けることができます。コードの書式設定は、これを解読しようとするのは大変です。 –

+1

上記のクエリで月が生成されている場合は、クエリに何年もかかると思われますか?私はいくつかのサンプルデータとあなたの質問に予想される出力を追加することをお勧めします。おそらく、人々があなたの問題の視覚的なイメージを少し持たなければ、SQL Serverでwhileループを作成しようとしているときに忘れてはならないことを思い出し、一歩踏み込んで考えてみてください。それをするの。 –

答えて

1

あなたの質問は少し混乱しているが、「現在の年のために賢明なアクティブな内容の月必要」に基づいて、私はこのような何かがあなたのためにはるかに高速になると思います。

SELECT COUNT(*), YEAR([Start Date]), Month([Start Date]) 
    FROM MasterTable 
    WHERE [Start Date] BETWEEN DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) AND GETDATE() 
    GROUP BY 
    YEAR([Start Date]), Month([Start Date]) 
+0

または単に '...年([StartDate])= @年...' – Sphinxxx

+0

いいえ@Sphinxxx – scsimon

関連する問題