Таблица разделов на основе объединенной таблицы - PullRequest
0 голосов
/ 24 октября 2019

У нас есть 2 таблицы Lead и Task. Один вывод может иметь несколько задач. Мы хотим определить, есть ли у Лида Задание, в описании которого содержится Строка 'x'.

Если у Лида есть Строка, он должен принадлежать к группе1, если нет к группе 2.

Затем мы хотим подсчитать количество потенциальных клиентов по группе и неделе. Проблема, с которой мы столкнулись, заключается в том, что если у Лида есть несколько задач, и у одной из них в описании есть строка «x», а у других ее нет, она учитывается в обеих группах.

Нам нужно что-то, похожее насломать;оператор в предложении IFF подзапроса, так что если первое условие = содержит строку x, остальные задачи больше не учитываются. Как бы мы этого достигли?

Пока у нас есть следующее утверждение: --SQL:

SELECT LeadDate, GROUP, COUNT(LEAD_ID_T1)
FROM LEAD Lead INNER JOIN
     (SELECT DISTINCT LEAD.ID AS LEAD_ID_T1,
                      IFF(CONTAINS(Task.DESCRIPTION,
                                   'x'),
                          'GROUP1',
                          'GROUP2') AS GROUP
               FROM TASK Task
                        RIGHT JOIN LEAD ON TASK.WHO_ID = LEAD.ID
               ) T1 ON T1.LEAD_ID_T1 = LEAD.ID
GROUP BY LeadDate,GROUP;

Разрывы кода, потому что он не может агрегировать меры.

Действительноблагодарен за любой вклад. Это беспокоило меня уже несколько дней.

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вы также можете попробовать что-то вроде этого, CASE с 1 и 0, а затем взять SUM

SELECT LeadDate, 
sum(CASE When  t.description like '%x%'then 1 else 0 end) as Group1,
sum(CASE When  t.description like '%x%'then 0 else 1 end) as Group2
FROM TASK t
RIGHT JOIN LEAD l ON t.WHO_ID = l.ID
GROUP BY LeadDate;
0 голосов
/ 24 октября 2019

Я думаю EXISTS с выражением CASE:

select l.*,
       (case when exists (select 1
                          from task t
                          where t.who_id = l.id and
                                t.description like '%x%'
                         )
             then 'GROUP1' else 'GROUP2'
        end) as the_group
from lead l;
...