基于日值SQL SERVER

时间:2016-11-03 09:34:05

标签: sql sql-server tsql

我正在尝试通过根据一列中的上一个日期从不同的表中选择一些列来创建视图。这工作正常,这是我的代码

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时,它显示错误。

有什么建议吗?非常感谢你。

3 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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())
      )
  )

答案 2 :(得分:0)

尝试使用CASE WHEN

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