2013-07-31 2 views
2

Я очень новичок в SQL/MySQL и Stackoverflow, и я пытаюсь создать запрос через iReport (хотя мне не нужно использовать iReport) для SugarCRM CE. Мне нужно создать отчет, который отображает количество «Рефералов», «Голосовые сообщения», «Электронные письма» и «Call_ins», которые связаны с конкретным «пользователем» (сотрудником). В запросе, который я сейчас установил, работает; однако он работает через данные, несколько раз генерируя отчет, который составляет более 200 страниц. Это код, который я использую в настоящее время:Количество экземпляров на основе идентификатора пользователя

SELECT 
(SELECT COUNT(*) FROM `leads` INNER JOIN `leads_cstm` ON `leads`.`id` = `leads_cstm`.`id_c` WHERE (leadtype_c = 'Referral' AND users.`id` = leads.`assigned_user_id`)), 
(SELECT COUNT(*) FROM `leads` INNER JOIN `leads_cstm` ON `leads`.`id` = `leads_cstm`.`id_c` WHERE (leadtype_c = 'VM' AND users.`id` = leads.`assigned_user_id`)), 
(SELECT COUNT(*) FROM `leads` INNER JOIN `leads_cstm` ON `leads`.`id` = `leads_cstm`.`id_c` WHERE (leadtype_c = 'Email' AND users.`id` = leads.`assigned_user_id`)), 
users.`first_name`,users.`last_name` 
FROM 
`users` users, 
`leads` leads 

Буду признателен за любые рекомендации!

ответ

2

Вы хотите использовать условное суммирование. Ниже используется синтаксис MySQL:

SELECT sum(leadtype_c = 'Referral') as Referrals, 
     sum(leadtype_c = 'VM') as VMs, 
     sum(leadtype_c = 'Email') as Emails, 
     users.`first_name`, users.`last_name` 
FROM users join 
    `leads` 
    on users.`id` = leads.`assigned_user_id` INNER JOIN 
    `leads_cstm` 
    ON `leads`.`id` = `leads_cstm`.`id_c` 
group by users.id; 
+0

Вы FAST) сумма (случай, когда leadtype_c = 'Направление' THEN 1 ELSE 0 END) Я хочу добавил в моем ответе – realnumber3012

+0

Спасибо! Это именно то, что мне нужно – spearman008

0

Вы можете использовать COUNT с CASE для этого:

SELECT u.first_name, 
    u.last_name, 
    count(case when leadtype_c = 'Referral' then 1 end), 
    count(case when leadtype_c = 'VM' then 1 end), 
    count(case when leadtype_c = 'Email' then 1 end) 
FROM users u 
    JOIN leads l ON u.id = l.assigned_user_id 
    JOIN leads_cstm lc ON l.id = lc.id_c 
GROUP BY u.id 

Чтобы соответствовать вашим точные результаты, вероятно, вы должны использовать OUTER JOIN вместо этого, но это дает вам идею.

+0

Спасибо за помощь! – spearman008

+0

@ user2636343 - np, рад, что мы могли бы помочь! – sgeddes

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