【问题标题】:Changing VBA code - into - SQL statement更改 VBA 代码 - 成 - SQL 语句
【发布时间】:2017-11-02 20:58:18
【问题描述】:

我在 Excel VBA 中有这段代码:

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

【问题讨论】:

标签: sql vba syntax


【解决方案1】:

我会试一试。由于在 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

【讨论】:

    【解决方案2】:

    虽然在 SQL 语法中没有必要,但格式化您的 case 语句以查看字段的结束和开始位置会很有帮助,即:

    --Field 1
    CASE
        WHEN
        THEN
        ELSE
    END
    --Field 2
    CASE
       WHEN
       THEN
           CASE
           --still Field 2
               WHEN
               THEN
           END
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多