2014-02-10 9 views
-1

Любая идея, как я могу заменить NULL значение с Где условие значение «Джона Миллера»Заменить Нулевое значение с Где значение условие

 
select 
    t2.creatorfullname, 
    count(distinct(t1.ticketmaskid)) as total 
from 
    swtickets t1 join swticketauditlogs t2 
    on t1.ticketid = t2.ticketid 
where 
    from_unixtime(t2.dateline) > DATE_SUB(now(), INTERVAL 1 DAY) 
    and FIND_IN_SET(t2.creatorfullname,'John Miller') > 0 
    and t2.actionmsg like '%Ticket status changed from: % to: Closed%' 
    and totalreplies > 0; 

Таблица

 
+-----------------+-------+ 
| creatorfullname | total | 
+-----------------+-------+ 
| NULL   |  0 | 
+-----------------+-------+ 
1 row in set (1.47 sec) 

Я хотел бы получить следующие данные:

 
+-----------------+-------+ 
| creatorfullname | total | 
+-----------------+-------+ 
| John Miller  |  0 | 
+-----------------+-------+ 
1 row in set (1.47 sec) 

Что делать, если условие имеет несколько имен? ВОПРОС ОБНОВЛЕНО

 
select 
    t2.creatorfullname, 
    count(distinct(t1.ticketmaskid)) as total 
from 
    swtickets t1 join swticketauditlogs t2 
    on t1.ticketid = t2.ticketid 
where 
    from_unixtime(t2.dateline) > DATE_SUB(now(), INTERVAL 1 DAY) 
    and FIND_IN_SET(t2.creatorfullname,'John Miller, Alicia Lee, Steve Caleb') > 0 
    and t2.actionmsg like '%Ticket status changed from: % to: Closed%' 
    and totalreplies > 0; 
 
+-----------------+-------+ 
| creatorfullname | total | 
+-----------------+-------+ 
| NULL   |  0 | 
| Alicia Lee  |  5 | 
| Steve Caleb  | 43 | 
+-----------------+-------+ 
1 row in set (1.47 sec) 

Я хочу, чтобы это было:

 
+-----------------+-------+ 
| creatorfullname | total | 
+-----------------+-------+ 
| John Miller  |  0 | 
| Alicia Lee  |  5 | 
| Steve Caleb  | 43 | 
+-----------------+-------+ 
1 row in set (1.47 sec) 
+0

-1: Большая часть этого запроса не связан с этой проблемой. Этот вопрос не будет очень полезен для кого-либо еще. –

+0

Это имя Джона Миллера в этом списке? 'SELECT DISTICT creatorfullname FROM swticketauditlogs' – redolent

+0

Это просто, что Джона Миллера нет в этот конкретный день (ИНТЕРВАЛ 1 ДЕНЬ) Coz не каждый регистрируется ежедневно. – user1204671

ответ

0

Попробуйте это ...

SELECT IFNULL(t2.creatorfullname,'John Miller'), 
    COUNT(distinct(t1.ticketmaskid)) AS total 
FROM swtic ..... 
+0

Что делать, если имеется более одного имени creatorfullname. Вопрос обновлен – user1204671

0

Добавить IFNULL чек в вашем заявлении. t2.creatorfullname является NULL и FIND_IN_SET имеет значение Null полностью

select t2.creatorfullname, count(distinct(t1.ticketmaskid)) as total from swtickets t1 join swticketauditlogs t2 on t1.ticketid = t2.ticketid where from_unixtime(t2.dateline) > DATE_SUB(now(), INTERVAL 1 DAY) and FIND_IN_SET(IFNULL(t2.creatorfullname,'x'),'John Miller') > 0 and t2.actionmsg like '%Ticket status changed from: % to: Closed%' and totalreplies > 0; 
+0

ОШИБКА 1582 (42000): Неправильный счетчик параметров в вызове функции native 'ISNULL' – user1204671

+0

Извините, в MYsql его IFNULL. Моя вина. теперь обновляем ответ. – DhruvJoshi

+0

@ user1204671: На основании вашего вопроса обновлен, мой ответ по-прежнему полезен :) – DhruvJoshi

0

Вы должны сделать внешнее соединение между таблицей, содержащей список имен и ваш swticketauditlogs стол:

SELECT 
    t3.creatorfullname, 
    COUNT(DISTINCT t1.ticketmaskid) total 
FROM 
    swtickets t1 JOIN swticketauditlogs t2 USING (ticketid) NATURAL RIGHT JOIN (
    SELECT 'John Miller' creatorfullname 
    UNION ALL 
    SELECT 'Alicia Lee' 
    UNION ALL 
    SELECT 'Steve Caleb' 
) t3 
WHERE 
    t2.dateline > UNIX_TIMESTAMP(CURRENT_TIME - INTERVAL 1 DAY) 
    AND t2.actionmsg LIKE '%Ticket status changed from: % to: Closed%' 
    AND totalreplies > 0 
GROUP BY 
    t3.creatorfullname 
+0

с помощью t3 Выглядит многообещающим, но, к сожалению, пустым набором, 1 предупреждением (0.00 сек) – user1204671

+0

@ user1204671: Что было предупреждение? Можете ли вы разместить некоторые данные примера на http://sqlfiddle.com? – eggyal

+0

Предупреждение (код 1292): Неверное значение даты и времени: '22: 00: 32 ' – user1204671

0

Используйте GROUP BY.

Если вы желаете, чтобы фильтровать по определенным пользователям, держать поле в предложении WHERE: (РЕДАКТИРОВАНИЕ - LEFT JOIN)

select t2.creatorfullname 
    , count(distinct(t1.ticketmaskid)) as total 
from swticketauditlogs t2 
left join swtickets t1 on t1.ticketid = t2.ticketid 
where from_unixtime(t2.dateline) > DATE_SUB(now(), INTERVAL 1 DAY) 
    and FIND_IN_SET(t2.creatorfullname,'John Miller, Alicia Lee, Steve Caleb') > 0 
    and t2.actionmsg like '%Ticket status changed from: % to: Closed%' 
    and totalreplies > 0 
group by 
    t2.creatorfullname; 
+0

Я хочу только конкретных пользователей. поэтому ваше решение не будет работать – user1204671

+0

Отредактировано. Попробуй это сейчас. – redolent

+0

Это не работает. в основном сценарий был Алисия Ли, Стив Калеб находится в колонке creatorfullname, но Джон Миллер не находится в creatorfullname, так как Джон Миллер не доступен в колонке, я хочу показать его как John Miller 0. – user1204671

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