在SPSS中的SQL查询中使用CASE WHEN和MAX()的正确语法是什么?
我已尝试在SPSS语法窗口中使用以下查询,但它无法识别:
SELECT * FROM
(
SELECT id, MAX(CASE WHEN val='A' THEN 'A' END) as Val_1,
MAX(CASE WHEN val='B' THEN 'B' END) as Val_2
FROM table1 GROUP BY id
)a
WHERE Val_1 IS NULL OR Val_2 IS NULL;
我正在使用SPSS 20。
更新:我尝试使用我的查询和AK47提供的查询。
我的查询错误:
警告。命令名称:获取数据 SQLExecDirect失败:[Microsoft] [ODBC Excel驱动程序]查询表达式中的语法错误(缺少运算符)&MAX;(当VAL =' A' THEN' A' END时) #39;
AK47的错误:
警告。命令名称:获取数据 SQLExecDirect失败:[Microsoft] [ODBC Excel驱动程序] FROM子句中的语法错误。
这是在SPSS中找到正确语法还是认为SPSS不支持某些SQL函数?
答案 0 :(得分:0)
我不熟悉SPSS,但根据我的sql exp。我已经给了以下,希望它对你有帮助,
SELECT * FROM
(
SELECT id, CASE WHEN MAX(val)='A' THEN 'A' END as Val_1,
CASE WHEN MAX(val)='B' THEN 'B' END as Val_2
FROM table1 GROUP BY id
)a
WHERE Val_1 IS NULL OR Val_2 IS NULL;
答案 1 :(得分:0)
据推测,您是在GET DATA TYPE = ODBC命令中执行此操作。确切的SQL有效取决于您使用的特定数据库和ODBC驱动程序。当你说SQL没有被识别时,你的意思是什么?您是否从驱动程序或其他方面收到错误?
答案 2 :(得分:0)
事实证明,ODBC驱动程序(MS Access中使用的驱动程序相同)不支持CASE ... WHEN。相反,请使用SWITCH:
SELECT * FROM
(
SELECT id, MAX(SWITCH( val='A', 'A')) as Val_1,
MAX(SWITCH( val='B', 'B')) as Val_2
FROM table1 GROUP BY id
)a
WHERE Val_1 IS NULL OR Val_2 IS NULL;
这将产生相同的结果。