2014-01-11 2 views
1

Im пытается форматировать все мои данные в моей SQL, прежде чем информация отображенияДобавление случай Постулаты к SQL присоединиться заявление

И моя присоединяется отлично работает, у меня есть кусок данных (состояние), которое связанные названия, чтобы пойти с значение, но статус CASE не работает. Я в настоящее время заявление Swtich PHP, который делает это преобразование данных, но я хотел бы сделать это в SQL, если это возможно

SELECT 
l.leadid, l.companyname, l.status, l.dateadded, addedby.name AS addedby, assignedto.name AS assignedto, l.address, l.city, l.prov, l.country, l.postalcode, 
l.phone, l.fax, l.facebook, l.twitter, l.youtube, l.instagram, l.website, l.logo 
FROM leads l 
    INNER JOIN staff addedby ON l.addedby = addedby.staffid 
    INNER JOIN staff assignedto ON l.assignedto = assignedto.staffid 
    CASE l.status 
    WHEN l.status = 7 THEN l.status = 'Converted' 
    WHEN l.status = 6 THEN l.status = 'Hot' 
    WHEN l.status = 5 THEN l.status = 'Warm' 
    WHEN l.status = 4 THEN l.status = 'Open' 
    WHEN l.status = 3 THEN l.status = 'NEW' 
    WHEN l.status = 2 THEN l.status = 'Cold' 
     ELSE l.status = 'Dead' 
    END  
    WHERE l.leadid = $id 

ответ

2

Дело должно быть в SELECT списке, а не после INNER JOIN. Также вторая проблема заключается в использовании l.status = после каждого утверждения THEN. Синтаксис MySql требует только конечного значения после инструкции THEN, а не назначения значения.

отметить также, что вам не нужно l.status = участия в вашем when заявлении, потому что case value перечислен рядом с CASE заявления. Если вы строите специальную заявку, то это необходимо. Таким образом, вы можете просто написать его следующим образом:

я бы просто написать его следующим образом:

SELECT 
    l.leadid, 
    l.companyname, 
    CASE l.status 
     WHEN 7 THEN 'Converted' 
     WHEN 6 THEN 'Hot' 
     WHEN 5 THEN 'Warm' 
     WHEN 4 THEN 'Open' 
     WHEN 3 THEN 'NEW' 
     WHEN 2 THEN 'Cold' 
     ELSE 'Dead' 
    END As Status, 
    l.dateadded, 
    < rest of your fields > 
FROM leads l 
    INNER JOIN staff addedby ON l.addedby = addedby.staffid 
    INNER JOIN staff assignedto ON l.assignedto = assignedto.staffid 
WHERE l.leadid = $id 
+0

возвращает 0, если это потому, что столбец классифицируется как INT и im меняет его на символы? – user934902

+0

@ user934902 Я думаю, что проблема может быть «l.status =» после каждого утверждения THEN; там нужно только значение, попробуйте мой второй способ написать его и посмотреть, работает ли это. –

-2

попробовать

SELECT 
l.leadid, l.companyname, l.status, l.dateadded, addedby.name AS addedby, assignedto.name AS assignedto, l.address, l.city, l.prov, l.country, l.postalcode, 
l.phone, l.fax, l.facebook, l.twitter, l.youtube, l.instagram, l.website, l.logo, CASE l.status 
    WHEN l.status = 7 THEN l.status = 'Converted' 
    WHEN l.status = 6 THEN l.status = 'Hot' 
    WHEN l.status = 5 THEN l.status = 'Warm' 
    WHEN l.status = 4 THEN l.status = 'Open' 
    WHEN l.status = 3 THEN l.status = 'NEW' 
    WHEN l.status = 2 THEN l.status = 'Cold' 
     ELSE l.status = 'Dead' 
    END 
FROM leads l 
    INNER JOIN staff addedby ON l.addedby = addedby.staffid 
    INNER JOIN staff assignedto ON l.assignedto = assignedto.staffid  
WHERE l.leadid = $id 
+0

Отсутствует статус «END AS», иначе регистр возвращается в виде заголовка столбца – user934902

+0

Вы проверили это? Если вы отправляете код, который вы не тестировали, вы рискуете получить downvotes. –

3
  1. Вы хотите, чтобы ваш CASE в SELECT пункт
  2. Синтаксис CASE недействителен
  3. В качестве альтернативы ческие вы можете использовать MySQL (поскольку ваш вопрос с тегом mysql) конкретной менее многословной функцией ELT()

Это сказанное вы можете сделать что-либо

SELECT 
     l.leadid, l.companyname, 
     CASE l.status 
     WHEN 7 THEN 'Converted' 
     WHEN 6 THEN 'Hot' 
     WHEN 5 THEN 'Warm' 
     WHEN 4 THEN 'Open' 
     WHEN 3 THEN 'NEW' 
     WHEN 2 THEN 'Cold' 
     ELSE 'Dead' 
     END status, 
     l.dateadded, addedby.name AS addedby, 
     assignedto.name AS assignedto, l.address, 
     l.city, l.prov, l.country, l.postalcode, 
     l.phone, l.fax, l.facebook, l.twitter, 
     l.youtube, l.instagram, l.website, l.logo 
    FROM leads l JOIN staff addedby 
    ON l.addedby = addedby.staffid JOIN staff assignedto 
    ON l.assignedto = assignedto.staffid 
WHERE l.leadid = $id 

или

SELECT 
     l.leadid, l.companyname, 
     IFNULL(ELT(l.status - 1, 'Cold', 'New', 'Open', 'Warm', 'Hot', 'Converted'), 'Dead') status, 
     l.dateadded, addedby.name AS addedby, 
     assignedto.name AS assignedto, l.address, 
     l.city, l.prov, l.country, l.postalcode, 
     l.phone, l.fax, l.facebook, l.twitter, 
     l.youtube, l.instagram, l.website, l.logo 
    FROM leads l JOIN staff addedby 
    ON l.addedby = addedby.staffid JOIN staff assignedto 
    ON l.assignedto = assignedto.staffid 
WHERE l.leadid = $id 

Вот SQLFiddle демо (для обоих случаев)

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