2009-11-30 21 views
1

我在數據庫中有以下列。 AgreedStartDate,ActualStartDate。我需要應用以下邏輯:當AcualStartDate與AgreedStartDate在同一個業務周內時,它就位於SLA內部。如果情況並非如此,那麼它就在SLA之外。如果兩列中的任何一列都是NULL,那麼它是'不完整的'。計算同一個工作周之間的SLA SQL Server

回答

2

一個簡單的CASE語句?你不需要使用變量,你可以直接引用你的列名。我只是使用變量來完成一個聲明。

DECLARE @agreedStartDate DATETIME 
DECLARE @actualStartDate DATETIME 

SET @agreedStartDate = GETDATE() 
SET @actualStartDate = GETDATE() 

SELECT 
    CASE 
     WHEN 
      @agreedStartDate IS NULL 
      OR 
      @actualStartDate IS NULL 
     THEN 
      'Incomplete' 
     WHEN 
      DATEPART(wk, @agreedStartDate) = DATEPART(wk, @actualStartDate) 
      AND 
      DATEPART(yyyy, @agreedStartDate) = DATEPART(yyyy, @actualStartDate) 
     THEN 
      'Inside' 
     ELSE 
      'Outside' 
    END 
+0

可能需要一些調整,這取決於你的一個「商業週刊」的解釋。否則,將它放在FROM子句的頂部,你應該很好。 –

+0

我沒有得到DATEPART函數,這是如何解決兩個列都包含在同一個工作周即週一至週五的情況。即如果約定的開始日期是11月30日,則實際開始日期最遲應爲SLA內的12月4日。 – jhowe

+0

關於「商業周」,您可以使用SET DATEFIRST = 1等,以表明您的「開始日期」是一週。但是,通常應該嘗試保持當前服務器默認值的有效性,而不是將其設置爲單個查詢。 –

0

在SQL Server中,你可以使用一個CASE語句,如:

select case 
    when ActualStateDate is null or AgreedStartDate is null then 'Incomplete' 
    when datepart(wk,ActualStateDate) = datepart(AgreedStartDate) then 'Inside' 
    else 'Outside' 
    end as ColumnName 
from YourTable 
相關問題