2017-09-14 105 views
0

我期待的是数字为'NULL'时,我希望它在日期列中显示昨天的日期。使用case语句插入值SQL Server

   Date     Person  Team Figure 
    ------------------------------------------------------- 
    2017-09-01 00:00:00.000  Joe   1  NULL 
    2017-09-01 00:00:00.000  Tim   1  NULL 
    2017-09-01 00:00:00.000  Sam   1  NULL 
    2017-09-04 00:00:00.000  Ben   1  NULL 
    2017-09-04 00:00:00.000  Matt  1  NULL 
    2017-09-05 00:00:00.000  Alex  1  NULL 

结果:

   Date     Person  Team Figure 
    2017-09-13 00:00:00.000  Joe   1  NULL 
    2017-09-13 00:00:00.000  Tim   1  NULL 

我已经试过

DECLARE @Yesterday DATETIME 
    SET @Yesterday = DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) 

    CASE WHEN D.[Figure] IS NULL THEN 
    @Yesterday 
    ELSE D.[DATE] END 

,但我得到这个结果

Date      Person Team  Figure Month (No column name) 
    2017-09-01 00:00:00.000  Joe  1   NULL 1125 2017-09-13 00:00:00.000 
    2017-09-01 00:00:00.000  Alex  1   NULL 177  2017-09-13 00:00:00.000 

如何在这种情况下,改变这种在日期列声明?

+0

您的第一句话描述了对列的操作。你的例子显示过滤出的行。我很困惑。 –

+0

是的,我没有包括一切。我只是示范 - 忽略过滤的数据 –

回答

1

我认为你的代码可能会稍微过于复杂。我会简单地说:

select case when DF.[Figure] is null 
     then DateAdd(day,-1,getdate()) 
     else DF.[Date] 
     end as [Date],... 
+0

不是基本上我已经有了吗?产生相同的结果 –

+0

你只需要把它放在单词选择之后,然后再不选择日期列。因此,整个代码是: '选择DF时的情况[日常数据]为空 then DateAdd(day,-1,getdate()) else DF。[Order Date] end as [Date],Person ,团队,数字来自......' – Boydus

0

所以不是directely选择日期,你必须使用以下CASE表达:

SELECT CASE WHEN D.[Figure] IS NULL THEN DATEADD(DAY, -1, GETDATE()) 
      ELSE D.[DATE] 
     END AS [Date], 
     Person, 
     Team, 
     Figure, 
     Month 
FROM Tbl AS D 
0

时,这个数字是“NULL”我希望它显示昨天的日期我所希望做的是在日期字段中。

如果这是你想要的东西,那么你会怎么做:

select . . ., 
     coalesce(figure, cast(getdate() - 1 as date)) as figure 

根据您的数据。例如,我不知道这是你真正想要的,但是这是你问对于。