[英]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.