簡體   English   中英

Coldfusion計數案例錯誤取決於數據源

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM