【发布时间】:2015-09-28 16:56:54
【问题描述】:
我必须在 Sybase 引擎上运行以下两个查询:
SELECT COUNT(*) AS BTB_YES FROM FXMM_EVT_DBF WHERE M__INTID_ = '1.511' AND M_ISHEDGE = 1
SELECT COUNT(*) AS BTB_NO FROM FXMM_EVT_DBF WHERE M__INTID_ = '1.511' AND M_ISHEDGE = 0
由于我基本上选择了同一套信息,即:
SELECT M_ISHEDGE
FROM FXMM_EVT_DBF
WHERE M__INTID_ = '1.511'
然后我用两个单独的条件在此列上计数两次,我觉得有一种方法可以在同一个查询上获得结果,这很好,因为上述查询必须在多个数据库上运行。
但是,我无法获得联合结果,可能是因为我不太擅长 SQL。我的尝试是:
SELECT M_ISHEDGE
FROM FXMM_EVT_DBF WHERE M__INTID_ = '1.511'
CASE WHEN M_ISHEDGE = 1
then count(*)
else 0
END AS BTB_YES
CASE WHEN M_ISHEDGE = 0
then count(*)
else 0
END AS BTB_NO
但上述失败并出现以下错误:
An error occurred when executing the SQL command:
SELECT M_ISHEDGE
FROM FXMM_EVT_DBF WHERE M__INTID_ = '1.511'
CASE WHEN M_ISHEDGE = 1
then count(*)
else 0
END AS BTB_Y...
Incorrect syntax near the keyword 'CASE'. [SQL State=ZZZZZ, DB Errorcode=156]
Execution time: 0s
1 statement(s) failed.
SQL 编辑器似乎无法识别关键字THEN,虽然它是文档的一部分,所以可能是因为一些语法错误。
【问题讨论】:
-
因为您想在 M_ISHEDGE = 1 或 0 时计数,只需按该列分组。计数将正确计算,您将在两行中得到结果(每个 M_ISHEDGE 值一个)
标签: sql select count case sybase