2016-07-26 13 views
0

テーブルからデータを取得するレポートを四半期に1回(SQL Server Management Studio 2011)それは年および四半期ごとに組織されています。私は通常、実行するたびに手動でクエリを更新しますが、将来のユーザーのためにできるだけ自動化しようとします。「四半期」と「年」が唯一の日付列であるテーブルから最後のローリング四半期を自動的に選択する方法

WHERE 
    (CASE 
     WHEN AN.[Year] = 2016 AND AN.[Quarter] IN (1,2) THEN 1 
     WHEN AN.[Year] = 2015 AND AN.[Quarter] IN (3,4) THEN 1 
     ELSE 0 END) = 1 

だから私は、クエリを実行し、四半期ごとに、私は手動で必要な日付範囲を反映するように、where句のすべてを更新します。ここでは

は、私は現在、必要な日付範囲を選択するために使用していたコードです。

また、3年前と前年同期のデータを取得する必要があります。ここで私は現在、それらのために使用していているもの:

WHERE 
    (CASE 
     WHEN Al.[Year] = 2016 AND Al.[Quarter] IN (1,2) THEN 1 
     WHEN Al.[Year] IN (2014,2015) THEN 1 
     WHEN Al.[Year] = 2013 AND Al.[Quarter] in (3,4) THEN 1 
     ELSE 0 END) = 1 

WHERE 
    (CASE 
     WHEN AN.[Year] = 2015 AND AN.[Quarter] = 2 THEN 1 
     ELSE 0 END) = 1 

これを自動化する方法があるように、単に実行ヒット、クエリを開き、必要な日付範囲のデータを取得することができる誰か?

答えて

0

DATEPARTを利用して、今年と現在の四半期をあなたの利益に利用してください。以下のクエリは、必要な長年にわたって構築できます。

DECLARE @tblDates TABLE 
    (
    Dt Date, 
    [Year] int, 
    [Quarter] int 
    ) 

--Identify the boundary condition 
DECLARE @CurrentQuarter INT 
SET @CurrentQuarter = (SELECT DATEPART(QQ, GETDATE())) 

--Add in some test data 
INSERT INTO @tblDates 
    SELECT GETDATE(), DATEPART(YY, GETDATE()), DATEPART(QQ, GETDATE()) 
    UNION SELECT DATEADD(QQ, -1, GETDATE()), DATEPART(YY, DATEADD(QQ, -1, GETDATE())), DATEPART(QQ, DATEADD(QQ, -1, GETDATE())) 
    UNION SELECT DATEADD(QQ, -2, GETDATE()), DATEPART(YY, DATEADD(QQ, -2, GETDATE())), DATEPART(QQ, DATEADD(QQ, -2, GETDATE())) 
    UNION SELECT DATEADD(QQ, -3, GETDATE()), DATEPART(YY, DATEADD(QQ, -3, GETDATE())), DATEPART(QQ, DATEADD(QQ, -3, GETDATE())) 
    UNION SELECT DATEADD(QQ, -4, GETDATE()), DATEPART(YY, DATEADD(QQ, -4, GETDATE())), DATEPART(QQ, DATEADD(QQ, -4, GETDATE())) 
    UNION SELECT DATEADD(QQ, -5, GETDATE()), DATEPART(YY, DATEADD(QQ, -5, GETDATE())), DATEPART(QQ, DATEADD(QQ, -5, GETDATE())) 
    UNION SELECT DATEADD(QQ, -6, GETDATE()), DATEPART(YY, DATEADD(QQ, -6, GETDATE())), DATEPART(QQ, DATEADD(QQ, -6, GETDATE())) 
    UNION SELECT DATEADD(QQ, -7, GETDATE()), DATEPART(YY, DATEADD(QQ, -7, GETDATE())), DATEPART(QQ, DATEADD(QQ, -7, GETDATE())) 


SELECT * FROM @tblDates 
    WHERE 
     (
     --This year, but prior to the current quarter 
     [Year] = DATEPART(YY, GETDATE()) AND [Quarter] < @CurrentQuarter 
     ) 
     OR 
     (
     --Last year, but greater than or equal to current quarter will book-end the last 4 quarters 
     [Year] = DATEPART(YY, GETDATE()) - 1 AND [Quarter] >[email protected] 
     ) 
関連する問題