mysql选择case多列为

Ray*_*Ray 7 mysql

我想用这样的东西设置多个字段,我怎样才能使它工作?

Select TableId,
    CASE
        WHEN StartTime > Appt THEN
            Field AS Field_1
            FieldId AS FieldId_1
        WHEN StartTime BETWEEN Appt AND DATE_ADD(Appt, INTERVAL 1 MONTH) THEN
            Field AS Field_2
            FieldId AS FieldId_2
    END
FROM TableA;
Run Code Online (Sandbox Code Playgroud)

它不起作用,AS Field_1附近的语法错误.

Jer*_*yth 5

您正尝试在SQL语句中执行类似于宏扩展的操作,这是您无法执行的操作.解决问题的最简单方法是在应用程序代码中动态编写SQL,并从应用程序中有条件地执行该语句.

如果必须在SQL中执行此操作,则有几个选项.

每个CASE都是一个表达式,因此您只能通过CASE为每列分别生成输出字段:

SELECT ID,
  CASE WHEN StartTime > Appt THEN Field_A 
       WHEN StartTime BETWEEN Appt AND DATE_ADD(Appt, INTERVAL 1 MONTH) THEN
        Field_B
  END AS field1,
  CASE WHEN StartTime > Appt THEN Field_C 
       WHEN StartTime BETWEEN Appt AND DATE_ADD(Appt, INTERVAL 1 MONTH) THEN
        Field_D
  END AS field2
FROM TableA;
Run Code Online (Sandbox Code Playgroud)

或者,在存储过程中使用(或可能更简单)的语句形式CASEIF,以包含语句的多个版本并有条件地执行它们.


Mar*_*c B 2

这是完全错误的case语法。如果您所做的只是更改这些字段的别名,那么请在您的客户端中进行该转换。

例如

SELECT (StartTime > Appt) AS case1,
       (StartTime BETWEEN Appt AND Appt + INTERVAL 1 MONTH) AS case2
       Field,
       FieldID
FROM TableA

if ($row['case1']) then
    $field_1 = $row['Field'];
    $fieldid_1 = $row['FieldID'];
} else if ($row['case2']) {
    etc..
}
Run Code Online (Sandbox Code Playgroud)