简体   繁体   English

MySQL SQL Select 查询替换值

[英]MySQL SQL Select query and replace value

I have this SQL Query, where i have a few case statements and count in order to pivot my "clase x" rows and it returns something like this.我有这个 SQL 查询,其中我有一些案例陈述和计数,以便 pivot 我的“分类 x”行它返回类似这样的内容。

| Nombre Completo | Clase 1 | Clase 2|
--------------------------------------
| Example name   |   3      |    5   |
--------------------------------------

And what I need, its to replace the number, if the number its > 0 then replace it with a yes, else replace it with NO.我需要的是替换数字,如果数字> 0,则将其替换为是,否则将其替换为否。 How can I do that?我怎样才能做到这一点? Mysql Query: Mysql 查询:

SELECT  DISTINCT concat_ws(' ',U.firstname, U.lastname) as  Nombre_Completo,
COUNT(CASE WHEN b.name="Clase 1" THEN b.name END) Clase1,
COUNT(CASE WHEN b.name="Clase 2" THEN b.name END) Clase2,
COUNT(CASE WHEN b.name="Clase 3" THEN b.name END) Clase3,
COUNT(CASE WHEN b.name="Clase 4" THEN b.name END) Clase4,
COUNT(CASE WHEN b.name="Clase 5" THEN b.name END) Clase5,
COUNT(CASE WHEN b.name="Clase 6" THEN b.name END) Clase6,
COUNT(CASE WHEN b.name="Clase 7" THEN b.name END) Clase7,
COUNT(CASE WHEN b.name="Clase 8" THEN b.name END) Clase8,
COUNT(CASE WHEN b.name="Clase 9" THEN b.name END) Clase9,
COUNT(CASE WHEN b.name="Clase 10" THEN b.name END) Clase10,
COUNT(CASE WHEN b.name="Clase 11" THEN b.name END) Clase11,
COUNT(CASE WHEN b.name="Clase 12" THEN b.name END) Clase12
FROM mdl_logstore_standard_log as L
LEFT JOIN mdl_course as C ON L.courseid = C.id 
left JOIN mdl_user as U on L.userid = U.ID
JOIN mdl_bigbluebuttonbn AS b ON L.objectid = b.id
JOIN mdl_role_assignments AS ra ON L.userid = ra.userid
JOIN mdl_role AS r ON r.id = ra.roleid
WHERE (C.shortname LIKE '%CSG012020%') AND (ra.roleid=5)  AND (ra.roleid NOT IN (3,4))
GROUP BY Nombre_Completo;

Use IF() to test the result of COUNT()使用IF()测试COUNT()的结果

SELECT  DISTINCT concat_ws(' ',U.firstname, U.lastname) as  Nombre_Completo,
IF(COUNT(CASE WHEN b.name="Clase 1" THEN b.name END) > 0, 'Yes', 'No') Clase1,
IF(COUNT(CASE WHEN b.name="Clase 2" THEN b.name END) > 0, 'Yes', 'No') Clase2,
IF(COUNT(CASE WHEN b.name="Clase 3" THEN b.name END) > 0, 'Yes', 'No') Clase3,
IF(COUNT(CASE WHEN b.name="Clase 4" THEN b.name END) > 0, 'Yes', 'No') Clase4,
IF(COUNT(CASE WHEN b.name="Clase 5" THEN b.name END) > 0, 'Yes', 'No') Clase5,
IF(COUNT(CASE WHEN b.name="Clase 6" THEN b.name END) > 0, 'Yes', 'No') Clase6,
IF(COUNT(CASE WHEN b.name="Clase 7" THEN b.name END) > 0, 'Yes', 'No') Clase7,
IF(COUNT(CASE WHEN b.name="Clase 8" THEN b.name END) > 0, 'Yes', 'No') Clase8,
IF(COUNT(CASE WHEN b.name="Clase 9" THEN b.name END) > 0, 'Yes', 'No') Clase9,
IF(COUNT(CASE WHEN b.name="Clase 10" THEN b.name END) > 0, 'Yes', 'No') Clase10,
IF(COUNT(CASE WHEN b.name="Clase 11" THEN b.name END) > 0, 'Yes', 'No') Clase11,
IF(COUNT(CASE WHEN b.name="Clase 12" THEN b.name END) > 0, 'Yes', 'No') Clase12
FROM mdl_logstore_standard_log as L
LEFT JOIN mdl_course as C ON L.courseid = C.id 
left JOIN mdl_user as U on L.userid = U.ID
JOIN mdl_bigbluebuttonbn AS b ON L.objectid = b.id
JOIN mdl_role_assignments AS ra ON L.userid = ra.userid
JOIN mdl_role AS r ON r.id = ra.roleid
WHERE (C.shortname LIKE '%CSG012020%') AND (ra.roleid=5)  AND (ra.roleid NOT IN (3,4))
GROUP BY Nombre_Completo;

Every:每一个:

COUNT(CASE WHEN b.name="Clase X" THEN b.name END)

in your code can be written as:在您的代码中可以写成:

SUM(b.name='Clase X')

because MySql evaluates boolean expressions like b.name='Clase 1' as 1 (true) or 0 (false).因为 MySql 将像b.name='Clase 1'这样的 boolean 表达式计算为1 (true) 或0 (false)。

Also, any integer value can be interpreted as false if it is 0 or true if it is different than 0 .此外,任何 integer 值如果为0则可以解释为false ,如果它不同于0则可以解释为true

So you can write your query like this:所以你可以这样写你的查询:

SELECT concat_ws(' ', U.firstname, U.lastname) Nombre_Completo,
       CASE WHEN SUM(b.name='Clase 1') THEN 'yes' ELSE 'no' END Clase1,
       CASE WHEN SUM(b.name='Clase 2') THEN 'yes' ELSE 'no' END Clase2,
       CASE WHEN SUM(b.name='Clase 3') THEN 'yes' ELSE 'no' END Clase3,
       CASE WHEN SUM(b.name='Clase 4') THEN 'yes' ELSE 'no' END Clase4,
       CASE WHEN SUM(b.name='Clase 5') THEN 'yes' ELSE 'no' END Clase5,
       CASE WHEN SUM(b.name='Clase 6') THEN 'yes' ELSE 'no' END Clase6,
       CASE WHEN SUM(b.name='Clase 7') THEN 'yes' ELSE 'no' END Clase7,
       CASE WHEN SUM(b.name='Clase 8') THEN 'yes' ELSE 'no' END Clase8,
       CASE WHEN SUM(b.name='Clase 9') THEN 'yes' ELSE 'no' END Clase9,
       CASE WHEN SUM(b.name='Clase 10') THEN 'yes' ELSE 'no' END Clase10,
       CASE WHEN SUM(b.name='Clase 11') THEN 'yes' ELSE 'no' END Clase11,
       CASE WHEN SUM(b.name='Clase 12') THEN 'yes' ELSE 'no' END Clase12
FROM mdl_logstore_standard_log as L
LEFT JOIN mdl_course as C ON L.courseid = C.id 
left JOIN mdl_user as U on L.userid = U.ID
JOIN mdl_bigbluebuttonbn AS b ON L.objectid = b.id
JOIN mdl_role_assignments AS ra ON L.userid = ra.userid
JOIN mdl_role AS r ON r.id = ra.roleid
WHERE (C.shortname LIKE '%CSG012020%') AND (ra.roleid=5)  AND (ra.roleid NOT IN (3,4))
GROUP BY Nombre_Completo;

I removed DISTINCT because it is not needed since you GROUP BY Nombre_Completo .我删除了DISTINCT ,因为您GROUP BY Nombre_Completo它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM