2016-06-29 16 views
-1

Я пытаюсь создать диаграмму с запросом запросов, но получаю ошибку 500, независимо от того, что я пытаюсь. В результате я столкнулся с тегом cfchart как проблема, но не смог найти никаких синтаксических ошибок в нем и никаких логических ошибок.CFChart, производящий ошибку 500

<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> 

Примеры данных

Users Table Sample Data 
UserID StripeCustomerID 
35   cus_8LOSlmvEQcfg1g 
36   cus_6ixCBe7aU1MJEt 
50   NULL 
60   cus_6ifLCNmR9rOBCl 
69   NULL 
70   NULL 
72   NULL 
73   NULL 
74   NULL 
+0

Вы указываете 'itemcolumn =«UserID»', но вы не имеете столбец UserID в вашем 'queryOfQuery' запроса – duncan

+0

(EDIT), что не дало бы нам ошибку 500, а у нас есть электронная почта ошибки сервера посланный нам в этом случае. Хотя это может быть проблемой позже, было бы легко исправить. –

+0

о, действительно ... ты уверен? – duncan

ответ

2

Ваш вопрос синтаксиса

SELECT (Licenses/Registrations) AS Percent FROM getData 

Процент является зарезервированным ключевым словом, так что вам нужно добавить скобки или одиночные кавычки, чтобы ноу SQL двигателя вы используете зарезервированное ключевое слово в качестве псевдонима столбца.

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

ИЛИ

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 

Плюс Мне любопытно, что вы хотите для Лицензий. Вы пытаетесь получить DISTINCT UserIdcount или count всего non null UserIds. Остальная часть вашего запроса подсказывает, что USerId повторяет себя в таблице «Пользователи» (которую я нахожу очень странно) ... Итак, UserId 5 может существовать 2 или 3 раза, поэтому подсчет разных будет давать вам 1 для userid 5, в то время как добавление отдельных будет давать вы 2 или 3 ...

Есть registrations всегда 1? Если это так, то UserId уникален, и вам не нужны ваши агрегирования в основном запросе. И ответ для Percent всегда будет таким же, как 1/# Лицензий .......

По вашим словам, это ваш запрос, который вам нужен.

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' 
+0

Я хотел получить кол-во всех 'non null UserIDs'.Пользователь Distinct UserID должен был убедиться, что люди, которые купили несколько лицензий, не отображались более одного раза. Этот запрос работает хорошо, спасибо за помощь! –

+0

рад, что это сработало для вас, пожалуйста, примите ответ, чтобы другие знали, что на вопрос был дан ответ. Благодарю. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Matt

+0

На самом деле, еще одно: запрос, который вы мне дали, не делит правильно, лицензии и проценты одинаковы значение, которое распечатано –

 Смежные вопросы

  • Нет связанных вопросов^_^