Sql CFChart产生500错误

Sql CFChart产生500错误,sql,coldfusion,cfchart,qoq,Sql,Coldfusion,Cfchart,Qoq,我试图创建一个带有查询查询的图表,但无论我怎么做,都会收到500个错误。我最终确定了cfchart标记的范围,认为这是问题所在,但在其中找不到任何语法错误,也找不到任何逻辑错误 <cfquery name="getData" datasource="#dsn#"> SELECT ( SELECT Count(UserID) FROM Users WHERE StripeCustomerID IS N

我试图创建一个带有查询查询的图表,但无论我怎么做,都会收到500个错误。我最终确定了cfchart标记的范围,认为这是问题所在,但在其中找不到任何语法错误,也找不到任何逻辑错误

<cfquery name="getData" datasource="#dsn#">
   SELECT 
          ( SELECT Count(UserID) 
            FROM   Users 
            WHERE  StripeCustomerID IS NOT NULL
          ) AS 'Licenses'
          , COUNT(UserID) AS 'Registrations'
          , UserID AS 'User'
  FROM  Users
  WHERE DATEDIFF(hour, FirstContact, DateStamp) <= '12'
  GROUP BY UserID
</cfquery>

<cfquery name="queryOfQuery" dbtype="query">
   SELECT (Licenses/Registrations) AS Percent FROM getData
</cfquery>


<cfchart format="flash"> 
     <cfchartseries type="bar"
        query="queryOfQuery"
        itemcolumn="UserID"
        valuecolumn="Percent"  />
</cfchart>
您的语法问题是

SELECT (Licenses/Registrations) AS Percent FROM getData
百分比是一个保留关键字,因此您需要添加括号或单引号,以便让SQL引擎知道您正在使用保留关键字作为列别名

SELECT (Licenses/Registrations) AS [Percent] FROM getData

您可以轻松地将百分比列添加到原始数据集中

SELECT 
    (SELECT Count(UserID) FROM Users WHERE StripeCustomerID IS NOT NULL)     AS     Licenses, 
    COUNT(UserID) AS Registrations,
    (SELECT Count(UserID) FROM Users WHERE StripeCustomerID IS NOT NULL) / COUNT(UserID) AS [Percent],
    UserID AS User
FROM Users
WHERE DATEDIFF(hour, FirstContact, DateStamp) <= '12'
GROUP BY UserID

您指定了
itemcolumn=“UserID”
,但您的
queryOfQuery
查询(编辑)中没有一个不会给我们500错误的列UserID,在这种情况下,我们会收到一封服务器错误电子邮件。即使这可能是一个问题以后,它将很容易修复。哦,真的。。。你确定吗?当然,我们注释掉了“chartseries”,但它仍然给了我们500个错误。你可能可以按照我的回答处理查询,但你的语法问题是%,因为它是一个保留关键字,你没有单次引用它或将它括起来。为了在将来的测试中发现您的sql无关且不在cold fusion中,我想获得所有
非空用户ID的计数。独特的用户ID用于确保购买多个许可证的用户不会出现多次。此查询运行良好,感谢您的帮助!很高兴它对您有效。请接受答案,以便其他人知道问题已得到回答。谢谢实际上,还有一件事,你给我的查询没有正确划分,许可证和百分比是打印的相同值out@N.Ziff我在回答中指出,根据您的数据,如何以及为什么会发生这种情况。如果您希望获得有关编写查询的正确方法的帮助,那么您将需要提供一些示例数据和所有应该涉及的表的所需结果。我认为您可能缺少到另一个表的联接,但我不知道您的数据结构。Oops。我明白了,现在,我将开始添加示例数据和期望的结果。
SELECT (Licenses/Registrations) AS 'Percent' FROM getData
SELECT 
    (SELECT Count(UserID) FROM Users WHERE StripeCustomerID IS NOT NULL)     AS     Licenses, 
    COUNT(UserID) AS Registrations,
    (SELECT Count(UserID) FROM Users WHERE StripeCustomerID IS NOT NULL) / COUNT(UserID) AS [Percent],
    UserID AS User
FROM Users
WHERE DATEDIFF(hour, FirstContact, DateStamp) <= '12'
GROUP BY UserID
SELECT
    COUNT(UserId) AS Registrations
    ,SUM(CASE WHEN StripeCustomerId IS NOT NULL THEN 1 ELSE 0 END) AS Licenses
    ,CASE
       WHEN SUM(CASE WHEN StripeCustomerId IS NOT NULL THEN 1 ELSE 0 END) = 0 THEN 0
       ELSE COUNT(UserId) / SUM(CASE WHEN StripeCustomerId IS NOT NULL THEN 1 ELSE 0 END)
    END AS [Percent]
FROM
    Users
WHERE DATEDIFF(hour, FirstContact, DateStamp) <= '12'