簡體   English   中英

如何獲取上一年的當前月份和前幾個月

[英]How to get the current month and previous months for the previous year

我需要獲取當年的當前月份和去年的月份。 像這樣的東西: 在此處輸入圖片說明

現在我所做的是像這樣硬編碼:

, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 1 THEN trans.OutQty END), 0.00) as 'Jan'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 2 THEN trans.OutQty END), 0.00) as 'Feb'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 3 THEN trans.OutQty END), 0.00) as 'Mar'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 4 THEN trans.OutQty END), 0.00) as 'Apr'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 5 THEN trans.OutQty END), 0.00) as 'May'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 6 THEN trans.OutQty END), 0.00) as 'Jun'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 7 THEN trans.OutQty END), 0.00) as 'Jul'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 8 THEN trans.OutQty END), 0.00) as 'Aug'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 9 THEN trans.OutQty END), 0.00) as 'Sep'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 10 THEN trans.OutQty END), 0.00) as 'Oct'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 11 THEN trans.OutQty END), 0.00) as 'Nov'
, ISNULL(SUM(CASE WHEN month(trans.DocDate) = 12 THEN trans.OutQty END), 0.00) as 'Dec'

是否可以動態進行而不是進行硬編碼?

請根據您的要求在 MSSQL 服務器上找到以下答案。

 DECLARE @v_date DATETIME =GETDATE()    --'2019-11-11'

;WITH months(MonthNumber) AS
(
    SELECT 0
    UNION ALL
    SELECT MonthNumber+1 
    FROM months
    WHERE MonthNumber < 13
)
SELECT  
        LEFT(DATENAME(MONTH,DATEADD(MONTH,-MonthNumber,@v_date)),3)+'-'+LEFT(DATENAME(YEAR,DATEADD(MONTH,-MonthNumber,@v_date)),10) AS [Month],
        MonthNumber+1 AS Month_number ,
        CASE WHEN CONCAT('Current Month - ' ,MonthNumber) = 'Current Month - 0' THEN 'Current Month' ELSE CONCAT('Current Month - ' ,MonthNumber) END AS Remark
FROM months;

在此處輸入圖片說明

這是動態查詢

     declare @monthstart int=1,@monthend int=12,@strquery varchar(max)=''
     while(@monthstart<=@monthend)
     begin
        SET @strquery=@strquery+', ISNULL(SUM(CASE WHEN month(trans.DocDate) =' +Convert(varchar,@monthstart)+ ' THEN trans.OutQty END), 0.00) as '+SUBSTRING(DateName( month , DateAdd( month , @monthstart , -1 ) ),1,3)+''
        SET @monthstart=@monthstart+1
     end
     print(@strquery)

以下是您需要的輸出

, ISNULL(SUM(CASE WHEN month(trans.DocDate) =1 THEN trans.OutQty END), 0.00) as Jan, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =2 THEN trans.OutQty END), 0.00) as Feb, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =3 THEN trans.OutQty END), 0.00) as Mar, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =4 THEN trans.OutQty END), 0.00) as Apr, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =5 THEN trans.OutQty END), 0.00) as May, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =6 THEN trans.OutQty END), 0.00) as Jun, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =7 THEN trans.OutQty END), 0.00) as Jul, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =8 THEN trans.OutQty END), 0.00) as Aug, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =9 THEN trans.OutQty END), 0.00) as Sep, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =10 THEN trans.OutQty END), 0.00) as Oct, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =11 THEN trans.OutQty END), 0.00) as Nov, 
ISNULL(SUM(CASE WHEN month(trans.DocDate) =12 THEN trans.OutQty END), 0.00) as Dec

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM