3

ビューを動的に作成して、会計年度 (会計年度) に基づいてデータを取得するにはどうすればよいですか。

サンプルデータがあるサンプルデータを見てみましょう。

    Declare @t table(StartDate date )
    insert into @t values('04/01/2012'),
    ('01/01/2012'),
    ('09/15/2013'),
    ('04/01/2014'),
    ('01/01/2015'),
    ('09/15/2015'),
    ('04/01/2016'),
    ('01/01/2017'),
    ('09/15/2016')

たとえば、今日ビューを実行した場合、2016 年 3 月から 2017 年 4 月までのデータを取得する必要があります。2017 年 5 月にビューを実行した場合、2017 年 3 月から 2017 年 5 月までのデータを取得する必要があります。サーバースクリプトまたはストアドプロシージャですが、 Dynamic View または View で同じ結果を得るにはどうすればよいですか。私に提案してください!

私のスクリプト

DECLARE @STARTDATE DATETIME, @ENDDATE DATETIME,@CURR_DATE DATETIME
SET @CURR_DATE='2016-06-01'
IF MONTH(@CURR_DATE) IN (1,2,3)
BEGIN
    SET @STARTDATE= CAST( CAST(YEAR(@CURR_DATE)-1 AS VARCHAR)+'/04/01'  AS DATE)
    SET @ENDDATE= CAST( CAST(YEAR(@CURR_DATE)  AS VARCHAR)+'/03/31'  AS DATE)
END
ELSE
BEGIN
    SET @STARTDATE= CAST( CAST(YEAR(@CURR_DATE) AS VARCHAR)+'/04/01'  AS DATE)
    SET @ENDDATE= CAST( CAST(YEAR(@CURR_DATE)+1 AS VARCHAR)+'/03/31'  AS DATE)
END

select  * from @t
where StartDate between 
 @STARTDATE  AND @ENDDATE 
 order by year (StartDate)

会計年度(2016-2017)に必要なデータを提供していますが、これを使用してVIEWを作成するにはどうすればよいですか

4

4 に答える 4

3
select t.*,getdate() 
    from @t t
    where   year(startdate) * 100 + month(startdate) >=
        case 
        when  month(getdate()) in (1,2,3) then (year(getdate()) * 100) + 3 - 100
        else  (year(getdate()) * 100) + 3 
        end
于 2016-06-01T08:12:31.873 に答える
1

ビューで現在の日付 ( ) にcte基づく日付を使用できます。GETDATE()

;WITH cte AS (
SELECT  CASE WHEN MONTH(GETDATE()) IN (1,2,3) THEN CAST( CAST(YEAR(GETDATE())-1 AS VARCHAR)+'/04/01'  AS DATE) ELSE CAST( CAST(YEAR(GETDATE()) AS VARCHAR)+'/04/01'  AS DATE) END AS StartDate,
        CASE WHEN MONTH(GETDATE()) IN (1,2,3) THEN CAST( CAST(YEAR(GETDATE())  AS VARCHAR)+'/03/31'  AS DATE) ELSE CAST( CAST(YEAR(GETDATE())+1 AS VARCHAR)+'/03/31'  AS DATE) END AS EndDate
)

SELECT t.* 
FROM YourTable t
INNER JOIN cte c
ON t.StartDate between c.StartDate AND c.EndDate 
ORDER BY year(t.StartDate)
于 2016-06-01T07:57:24.267 に答える