[英]coldfusion count case error depending on datasource
我正在使用Coldfusion使用COUNT CASE语句从数据库中检索一些值。
下面的SQL与SQL Server数据源完美地兼容:
<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
但是当我更改查询以指向访问数据库中完全相同的表时,会收到错误消息:
<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驱动程序] [ODBC套接字] [Microsoft] [ODBC Microsoft Access驱动程序]语法错误(缺少运算符)在查询表达式“ COUNT(在DrawingTypeFK ='Civil'时为1,否则为null结束)。
有什么想法吗? 我唯一的理论是它的访问驱动程序,但我使用此数据源的其他查询(无Count Case)都很好。
干杯尼尔
Access的数据库引擎不支持CASE ... WHEN
,因此您需要重写查询。 您可以在Access SQL中使用IIf()
近似CASE ... WHEN
。
SELECT SiteFK,
Scheme,
Count(IIf(DrawingTypeFK = 'Civil', 1, null)) as CCount
Count()
仅计算非Null值,因此应该给您我认为想要的东西。 但是,如果要使用Sum()
,如注释中所建议,这也应该起作用:
Sum(IIf(DrawingTypeFK = 'Civil', 1, 0)) as CCount
我尚未测试此代码,并且我想它的效率将比您的代码低得多,但它应可在MS Access中使用。 如果您的代码可以在所需的任何地方工作,那么我认为它比下面的代码更好。
SELECT
SiteFK,
Scheme,
(
SELECT count(*)
FROM Drawings.tblDrawingsData Civil
WHERE Civil.Scheme = tblDrawingsData.Scheme
AND Civil.DrawingTypeFK = 'Civil'
) AS CCount,
(
SELECT count(*)
FROM Drawings.tblDrawingsData Civil
WHERE Civil.Scheme = tblDrawingsData.Scheme
AND Civil.DrawingTypeFK = 'Mechanical'
) AS MCount,
(
SELECT count(*)
FROM Drawings.tblDrawingsData Civil
WHERE Civil.Scheme = tblDrawingsData.Scheme
AND Civil.DrawingTypeFK = 'Electrical'
) AS ECount,
(
SELECT count(*)
FROM Drawings.tblDrawingsData Civil
WHERE Civil.Scheme = tblDrawingsData.Scheme
AND Civil.DrawingTypeFK = 'P & ID'
) AS PCount,
(
SELECT count(*)
FROM Drawings.tblDrawingsData Civil
WHERE Civil.Scheme = tblDrawingsData.Scheme
AND Civil.DrawingTypeFK = 'Zoning'
) AS ZCount
FROM Drawings.tblDrawingsData
WHERE SiteFK = 'MYSITE'
GROUP BY SiteFK, Scheme
ORDER BY Scheme
这是一个相关的子查询,因此它可能非常慢。 买家当心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.