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