2017-09-01 76 views
-1

我有如下表:
年初至今SQL與標準

oDate  value 
------------------------ 
2017-01-01 10 
2017-01-10 10 
2017-02-04 20 
2017-03-01 10 
2017-03-06 30 
2017-04-10 40 

我想擁有的總供一個月的所有日期。因此,查詢應該是:

select datepart(month, oDate) month, SUM(value) TotalValue 
from myTable 
group by datepart(month, oDate) 

如果我想有總對所有價值,我只需要跳過group by部分並刪除datepart(month, oDate)

我有2個參數是@Month int@Year varchar(5)
現在的問題是:我想在選定的monthyear中添加一些計算。

例如,如果參數爲@Month <= 3@Year <= '2017'那麼總數爲(Jan/2017 TotalValue) + (Feb/2017 TotalValue) + (Mar/2017 TotalValue)

但是,如果參數爲@Month > 3@Year = '2017'那麼總數爲(Jan/2017 TotalValue) + (Feb/2017 TotalValue) + (Mar/2017 TotalValue) + (Apr/2017 TotalValue * 2)

樣品結果:
隨着第一標準(@Month < = 3和@Year < = '2017')

TotalValue 
------------ 
70 

隨着第二標準(@Month> 3和@Year> =「2017 ')

TotalValue 
----------- 
150 

在第二個標準中,2017年4月的總數是2的倍數。所以40 * 2 = 80。從2017年1月到2017年3月的總價值爲70,那麼第二個標準的年份爲70 + 80 = 150

有沒有辦法做到這一點?
請指教,歡呼聲。

+0

請提供一些樣本數據和樣本結果,目前尚不清楚您要求的內容。 – JeffUK

+0

爲什麼乘以'April'2?如果'@month> 3'爲什麼你總結'月= 3'? –

+0

@JeffUK,完成。希望有助於理解我的問題。 – Haminteu

回答

2

對於這個簡單的示例,這裏是你將如何做到這一點。另外,根據您的測試數據,您的價值是錯誤的。 1月 - 3月的總數是80,而不是70.

declare @table table (oDate date, [value] int) 
insert into @table 
values 
('20170101',10), 
('20170110',10), 
('20170204',20), 
('20170301',10), 
('20170306',30), 
('20170410',40) 

declare @Month int = 4  --change this to 3, or 2, or 1... 
declare @Year int = 2017 

select 
    --[Month] = datepart(month, oDate), 
    TotalValue = SUM(case when datepart(month, oDate) <= 3 then [value] else [value] * 2 end) 
from 
    @table 
where 
    datepart(year,oDate) = @Year 
    and datepart(month, oDate) <= @Month 
--group by 
-- datepart(month, oDate)