【问题标题】:SELECT statement based on a day value SQL SERVER基于日值 SQL SERVER 的 SELECT 语句
【发布时间】:2016-11-03 18:07:05
【问题描述】:

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

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

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

【问题讨论】:

  • 我没有看到两个表,前一个日期是什么? GETDATE() ?你的预期输出是什么?
  • WHERE ([Order Entry Date] >= dateadd(day,datediff(day,1,GETDATE()),0) AND [Order Entry Date]

标签: sql sql-server tsql


【解决方案1】:

您可以将有关工作日的逻辑包含在您的 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')

【讨论】:

    【解决方案2】:

    只需使用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())
          )
      )
    

    【讨论】:

      【解决方案3】:

      在 CASE WHEN 时试试这个

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-11
        • 1970-01-01
        • 2021-12-05
        • 2020-12-27
        • 2021-01-05
        • 2019-01-17
        • 1970-01-01
        • 2015-10-30
        相关资源
        最近更新 更多