2017-09-13 46 views
-2

有沒有辦法將case語句的結果存儲在一個變量中,以便它有一個固定的結果,我可以在任何時候返回。存儲case語句導致一個變量SQL SEVER

例如

CASE 
    WHEN MONTH([DATE]) = MONTH(getdate()) AND 
    YEAR([DATE]) = YEAR(getdate()) 
    THEN SUM(Figure) 
    OVER (PARTITION BY [Name], 
    MONTH([DATE])) 
    ELSE 0 
    END INTO @MTD 

理想我希望能夠到一個由每月返回到計算不受where子句日期值

+0

由於這將是用於在選擇的每個記錄不同,它不能被存儲爲一個標量變量。你可以做的是創建一個臨時表,它執行calc並加入到主選擇中。 – HLGEM

回答

1

如果您使用變量來存儲利潤,它將只能存儲一行,因此e您應該添加一個where子句以選擇您想要檢索整體利潤的特定[名稱],[月]和可能[年]。除非你想在不同年份的同一月份累計利潤,否則應該在分區和WHERE子句中添加[Year]。

所得代碼將是這樣的:

declare 
    @val int = 0; 

select  
    @val = CASE 
     WHEN MONTH([DATE]) = MONTH(getdate()) AND 
     YEAR([DATE]) = YEAR(getdate()) 
     THEN SUM(PROFIT) 
     OVER (PARTITION BY [Name], 
      MONTH([DATE]), YEAR([DATE])) 
     ELSE 0 
     END 
FROM table_name 
WHERE [Name] = @Name AND 
     MONTH([DATE]) = @Month AND 
     YEAR([DATE]) = @Year 

print @val 
0

你可以嘗試這樣的:

declare 
    @MTD varchar(100) = null; 

select 
    @MTD = CASE 
    WHEN MONTH([DATE]) = MONTH(getdate()) AND 
    YEAR([DATE]) = YEAR(getdate()) 
    THEN SUM(PROFIT) 
    OVER (PARTITION BY [Name], 
    MONTH([DATE])) 
    ELSE 0 
    END 
+0

這就是我所得到的 - 「警告:空值被集合或其他SET操作消除。」 –

0

試試這個:

declare 
    @val int = 0; 

select 
    @val = CASE 
    WHEN MONTH([DATE]) = MONTH(getdate()) AND 
    YEAR([DATE]) = YEAR(getdate()) 
    THEN SUM(isnull(PROFIT,0)) 
    OVER (PARTITION BY [Name], 
    MONTH([DATE])) 
    ELSE 0 
    END 
    from table_name 

    print @val