在SPSS中使用CASE WHEN和MAX()

时间:2014-04-09 03:10:23

标签: sql spss

在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函数?

3 个答案:

答案 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;

这将产生相同的结果。