2010-10-22 178 views
-3

我試圖計算在2009年6月1日之前90天和2009年6月1日之後90天內銷售的物品,並且查詢如下。它顯示了一些錯誤。請有人親切地加我好嗎?計算日期範圍

SELECT 
location,      
SUM((CASE WHEN t.order_date DATEADD (DAY, -90, '6/1/2009') THEN t.Item ELSE NULL END) as Prior_Items, 
SUM(CASE WHEN t.order_date DATEADD (DAY, 89, '6/1/2009') THEN t.Item ELSE NULL END) as Post_Items 
ELSE NULL 
END) 
FROM mytable t 
where date = '6/1/2009' 
group by location 
+2

*有些錯誤* - 「我對這件事做了些什麼,現在這個東西已經壞了。」請更具體地說,你得到了什麼錯誤? – Piskvor 2010-10-22 15:24:06

+0

@Chris:小心與我們分享「一些錯誤」是什麼?在確定解決方案之前,它會避免有人試圖確定錯誤是什麼。 – 2010-10-22 15:24:52

+0

什麼樣的錯誤給你?你是否錯過了>和<在這種情況下,或者它只是一個複製錯誤? – 2010-10-22 15:25:42

回答

2

我想,你希望這樣的事情。

DECLARE @d DATETIME 

SET @d = '20090106' 


SELECT 
location,      
SUM(CASE WHEN t.order_date < @d and t.order_date > DATEADD (DAY, -90, @d) THEN t.Item END) as Prior_Items, 
SUM(CASE WHEN t.order_date >[email protected] AND t.order_date < DATEADD (DAY, 89, @d) THEN t.Item END) as Post_Items 
FROM mytable t 
where t.order_date BETWEEN DATEADD (DAY, -90, @d) AND DATEADD (DAY, 89, @d) 
group by location 
+0

真的需要'ELSE NULL'嗎?我相信'CASE'有默認的'ELSE NULL' – a1ex07 2010-10-22 15:29:55

+0

@ a1ex07 - 你是對的,這是不需要的。刪除。 – 2010-10-22 15:30:54

6

您的WHEN狀況未正確形成。

CASE WHEN t.order_date DATEADD (DAY, -90, '6/1/2009') THEN t.Item ELSE NULL END 
      ^^^^^^^^^^^^^^^^^^^^ 

最有可能你要喜歡的東西:

CASE WHEN t.order_date>=DATEADD (DAY, -90, '6/1/2009') THEN t.Item ELSE NULL END 
         ^^