【发布时间】:2014-10-21 12:53:20
【问题描述】:
我正在使用coldfusion 使用COUNT CASE 语句从数据库中检索一些值。
下面的 SQL 对 SQL 服务器数据源非常有效:
<cfquery name="getData" datasource="cfTSP1_Dev">
SELECT SiteFK,
Scheme,
COUNT(case when DrawingTypeFK = 'Civil' then 1 else null end) as CCount,
COUNT(case when DrawingTypeFK = 'Mechanical' then 1 else null end) as MCount,
COUNT(case when DrawingTypeFK = 'Electrical' then 1 else null end) as ECount,
COUNT(case when DrawingTypeFK = 'P & ID' then 1 else null end) as PCount,
COUNT(case when DrawingTypeFK = 'Zoning' then 1 else null end) as ZCount
FROM Drawings.tblDrawingsData
where SiteFK = 'MYSITE'
group by SiteFK,Scheme
order by Scheme
但是当我将查询更改为指向 access 数据库中完全相同的表时,我收到错误:
<cfquery name="getData" datasource="drawingsLink">
SELECT SiteFK,
Scheme,
COUNT(case when DrawingTypeFK = 'Civil' then 1 else null end) as CCount,
COUNT(case when DrawingTypeFK = 'Mechanical' then 1 else null end) as MCount,
COUNT(case when DrawingTypeFK = 'Electrical' then 1 else null end) as ECount,
COUNT(case when DrawingTypeFK = 'P & ID' then 1 else null end) as PCount,
COUNT(case when DrawingTypeFK = 'Zoning' then 1 else null end) as ZCount
FROM tblDrawingsData
where SiteFK = 'MYSITE'
group by SiteFK,Scheme
order by Scheme
错误是这样的:
[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] 查询表达式'COUNT(case when DrawingTypeFK = 'Civil' then 1 else null end)'中的语法错误(缺少运算符) .
任何想法为什么?我唯一的理论是它是访问驱动程序,但我使用此数据源(没有计数案例)的其他查询很好。
干杯 尼尔
【问题讨论】:
-
因为...访问。停止使用 Access,它不是为支持 Web 应用程序而构建的,而是使用 MySQL 或 PostgreSQL 之类的东西。它们都是免费的,而且比 Access 更强大,更适合支持 Web 应用程序。
-
说真的,我敢猜测这是 Access 的 JDBC 驱动程序的问题。
-
我不能代表较新版本的 Access,但我上次使用它时,SQL 不支持 CASE。作为桌面程序,它是有限的。当然这是很久以前的事了,但这可能是这里的原因,而不是驱动程序问题。要验证它,请从等式中删除 CF 并直接在 Access 中运行 SQL。老实说,即使是 MS 也建议不要在多线程 Web 应用程序中使用 Access。正如 Scott 所说,它不是为它设计的。
-
与您的问题无关,但您可能有逻辑错误。每当我写一个像你这样的查询时,我都会使用 sum(case ...)。
-
在这种特定情况下,使用
sum(case when .. then 1 else 0 end)应该不会对最终结果产生任何影响。也就是说,我也倾向于使用sum。
标签: sql-server coldfusion count ms-access-2007 case