2017-11-02 12 views
-1

を私はエクセルVBAでこのコードを持っている:VBAコードを変更する - に - SQLステートメントの

If Cells(lngRow, ConstTASTMS_ActivateTime).Value < getdate() - 7 Then 

    Cells(lngRow, ConstTASTimeClass).Value = "BOH" 

    If Cells(lngRow, ConstTASTask_Status) = "Closed" Then 

    If Cells(lngRow, ConstTASActual_EndDate).Value <= getdate() - 7 Then 

     Cells(lngRow, ConstTASTimeClass).Value = "BOH-CO" 

    Else 

     Cells(lngRow, ConstTASTimeClass).Value = "BOH-C" 

    End If 
    End If 

    If Cells(lngRow, ConstTASTask_StatusReason) = "Canceled" Then 

    If Cells(lngRow, ConstTASActual_EndDate).Value <= getdate() Then 

     Cells(lngRow, ConstTASTimeClass).Value = "BOH-XO" 

    Else 

     Cells(lngRow, ConstTASTimeClass).Value = "BOH-X" 

    End If 

    End If 

Else 

    Cells(lngRow, ConstTASTimeClass).Value = "New" 

    If Cells(lngRow, ConstTASTask_Status) = "Closed" Then Cells(lngRow, ConstTASTimeClass).Value = "New-C" 

    If Cells(lngRow, ConstTASTask_Status) = "Canceled" Then Cells(lngRow, ConstTASTimeClass).Value = "New-X" 

End If 

をそして今、私は、SQL文に翻訳する必要があります。 これまでのところ、私はこれを得て、それが正しいとは思わない。 誰かが見て、それを修正するのを手伝ってもらえますか?

CASE WHEN TMS_ActivateTime < getdate() - 7 THEN 

    TimeClass = "BOH" 

    CASE WHEN Task_Status = "Closed" THEN 

    CASE WHEN Actual_EndDate <= getdate() - 7 THEN 

    TimeClass = "BOH-CO" 

ELSE 

    TimeClass = "BOH-C" 

    CASE WHEN Task_StatusReason = "Canceled" THEN 

    CASE WHEN Actual_EndDate <= getdate() THEN 

    TimeClass = "BOH-XO" 

    ELSE 

    TimeClass = "BOH-X" 

ELSE 

    TimeClass = "New" 

    CASE WHEN Task_Status = "Closed" THEN TimeClass = "New-C" 

    CASE WHEN Task_Status = "Canceled" THEN TimeClass = "New-X" 

END 
+0

[*なぜ「誰かが私を助けることはできますか?」されていない、実際の質問を?*](https://meta.stackoverflow.com/q/284236/1188513)読み、[尋ねる]してください。あなたの質問には、よく、質問がありません。 –

+2

条件を覚えている場合は大文字と小文字を区別し、値をelsevalueにする。私はあなたの複数の場合にはここでは終わりが見えません。 – Twelfth

答えて

0

私はそれに打撃を与えるだろう。 WHENが真の後でCASEがそれ以上評価されないので、値がTimeClassに割り当てられる順序を時々逆にする必要があります。

SELECT 
CASE WHEN TMS_ActivateTime < getdate() - 7 THEN 
    CASE WHEN Task_StatusReason = "Canceled" THEN 
    CASE WHEN Actual_EndDate <= getdate() THEN 
    'BOH-XO' 
    ELSE 'BOH-X' 
    END 
    WHEN Task_Status = 'Closed' THEN 
    CASE WHEN Actual_EndDate <= getdate() - 7 THEN 
    'BOH-CO' 
    ELSE 'BOH-C' 
    END 
    ELSE 'BOH' 
    END 
ELSE 
    CASE 
    WHEN TaskStatus = 'Canceled' THEN 'New-X' 
    WHEN TaskStatus = 'Closed' THEN 'New-C' 
    ELSE 'New' END 
END 
AS TimeClass 
+0

itsLexありがとう、完璧に動作します! – MichMich

0

それはSQL構文では必要ありませんが、フィールドが終わると始まる場所を確認するためにあなたのcase文をフォーマットすると便利である、すなわち:

--Field 1 
CASE 
    WHEN 
    THEN 
    ELSE 
END 
--Field 2 
CASE 
    WHEN 
    THEN 
     CASE 
     --still Field 2 
      WHEN 
      THEN 
     END 
END 
関連する問題