2015-12-24 44 views
1

之間的情況我有一個腳本,我想從某些日期相應地從db中提取值。SQL Server:WHERE子句與

我有一個返回日期的函數,這個日期可以是currentDate - 1個月,或者可以是curentDate -2個月。該功能是

set @syssDate = DATEADD(month, -1, @syss_date); 

,我宣佈一個起始日期:

declare @start_quarter datetime 
set @start_quarter = '2015-07-01'; 

所有我想在我的WHERE條款添加

case 
    when syssDate = start_quarter 
     then bu.date between '2015-01-01' and '2015-10-01' 
     else -- another date 

我的查詢是這樣的:

declare @start_quarter datetime 
    set @start_quarter = '2015-01-01'; 

    declare @actual_Date datetime 
    set @actual_Date = DATEADD(month, -1, @rollover_date); 


     select sum(t.Revenue) as Revenue from (
      select sum(bu.value) as Revenue 
        from bus_category_for bu 
         join bus_category buc on buc.id=bu.bus_category_id 
         join bus bu on bu.id=buc.bus_id 
        where buc.type_id=18 and bu.id=21 and 
--Here I want to add a case statement 
bu.date between '2015-01-01' and '2015-10-01' 
+0

T-SQL中的CASE是一個**表達式**(比如'a + b'),它可以返回**,原子值** - 它是** NOT **流控制語句,所以你不能在其中包含完整的代碼塊。 –

+0

以及如何解決它?我如何使用'case'語句? –

+2

這對於'CASE'來說不是一個好的情況 - 你必須有兩個** CASE表達式 - 一個用於第一個日期,另一個用於BETWEEN中的第二個日期.... 。更好地使用由已經回答的人提供的解決方案 –

回答

2

我猜你需要如此mething這樣

SELECT Sum(t.Revenue) AS Revenue 
FROM (SELECT Sum(bu.value) AS Revenue 
     FROM bus_category_for bu 
       JOIN bus_category buc 
       ON buc.id = bu.bus_category_id 
       JOIN bus bu 
       ON bu.id = buc.bus_id 
     WHERE buc.type_id = 18 
       AND bu.id = 21 
       AND ((@syssDate = @start_quarter 
         AND bu.date BETWEEN '2015-01-01' AND '2015-10-01') 
         OR (another date)))a 
+0

謝謝親愛的VR46,一切正在...... ..... –

2

試着這麼做

WHERE (syssDate = start_quarter AND bu.date between '2015-01-01' and '2015-10-01') 
    OR (yssDate <> start_quarter AND bu.date between '2016-01-01' and '2016-10-01') 

一般來說,建議不要使用between的日期。最好使用bu.date >= '2015-01-01' AND bu.date < '2015-10-02'。見here

+1

建議實際上是使用'<'作爲第二次比較,而不是'<='. Using '> ='和'<='完全等同於'BETWEEN'。 –

+0

@Damien_The_Unbeliever,感謝您的糾正,打字速度很快......編輯糾正。 – HoneyBadger

+0

我會說「之間」的工作,因爲它應該。它的我們的誤解和錯誤的感覺 –