2016-11-03 37 views
0

我想通過基於一列中的前一個日期從不同的表中選擇一些列來創建視圖。這是工作的罰款,這是我的代碼基於日期值的SELECT語句SQL SERVER

ALTER VIEW [Orders_By_User] 
AS 
(


     SELECT 
     [Userid] 
     ,[Region] 
     ,[Country] 
     ,[Order Number] 
     ,[Order Entry Date] 
     ,[Customer Name] 

     FROM BACKLOG 
     WHERE ([Order Entry Date] >= dateadd(day,datediff(day,1,GETDATE()),0) 
     AND [Order Entry Date] < dateadd(day,datediff(day,0,GETDATE()),0)) 
     AND [Userid] IN ('dzuza', 'tmol', 'jmichal') 

     GROUP BY 
     [Userid] 
     ,[Region] 
     ,[Country] 
     ,[Order Number] 
     ,[Order Entry Date] 
     ,[Customer Name] 
) 

我想在同一視圖中添加一個條件,如果這一天是星期一所以選擇從週五沒有前一天是週日的數據。我試圖這樣做

SELECT 
CASE 
WHEN datename(dw, getdate()) in ('Tuesday','Wednesday','Thursday','Friday') THEN ... 
ELSE ... 

但我不知道如何正確書寫它。它顯示我錯誤,當我使用SELECT CASE然後另一個SELECT。

有什麼建議嗎?非常感謝你。

+0

I沒有看到兩張表,以前的日期是什麼? 'GETDATE()'?你的預期產出是多少? – sagi

+0

WHERE([訂單分錄日期]> = dateadd(日期,datediff(日期,1,GETDATE()),0) 和[訂單分錄日期] JuniorDev

回答

2

可以包括關於工作日到您的where條件邏輯,並且可以顯著簡化:

WHERE  
    [Order Entry Date] >= dateadd(dd, 
            case 
             when datename(dw, getdate()) = 'Monday' then -3 
             else -1 
            end, 
            cast(getdate() as date)) 
    AND [Order Entry Date] < cast(getdate() as date) 
    AND [Userid] IN ('dzuza', 'tmol', 'jmichal') 
0

嘗試此情況下,當

... 
CASE WHEN datename(dw, getdate()) = 'Tuesday' OR 
      datename(dw, getdate()) = 'Wednesday' OR 
      datename(dw, getdate()) = 'Thursday' OR 
      datename(dw, getdate()) = 'Friday' THEN ... 
1

只需使用一個or(我需要調整您的day字段)

where [Userid] IN ('dzuza', 'tmol', 'jmichal') 
and 
    (
     (
     datename(dw,getdate()) in ('Tuesday','Wednesday','Thursday','Friday') 
     and [Order Entry Date] = dateadd(d,-1,getdate()) 
    ) 
    or 
     (
     datename(dw,getdate()) = 'Monday' 
     and [Order Entry Date] = dateadd(d,-3,getdate()) 
    ) 
)