2017-09-14 116 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 

根據您的數據。例如,我不知道這是你真正想要的,但是這是你問對於。