你好我之前曾问过同样的问题,但我想要另一种方式。我们可以使用locate和max函数来解决问题。但我的老师告诉我这样做
我的代码是这样的,当'0'然后'1',否则'0'
select u.id, u.name,
case f.finger when '0' then '1' else '0' end as '0',
case f.finger when '1' then '1' else '0' end as '1',
case f.finger when '2' then '1' else '0' end as '2',
case f.finger when '3' then '1' else '0' end as '3',
case f.finger when '4' then '1' else '0' end as '4',
case f.finger when '5' then '1' else '0' end as '5'
from users u left join user_fingerprints f
on u.id= f.user_id
上面的代码将产生8行。
然后我需要组合行,以便具有相同id的行组合起来产生这个
从该结果然后用例函数。当值为1然后是y。当值为零时,则为n。
答案 0 :(得分:0)
您也可以使用SUM()
和另一个CASE EXPRESSION
:
SELECT t.id,t.name,
CASE WHEN t.`0` > 0 THEN 'Y' ELSE 'N' as `0`
CASE WHEN t.`1` > 0 THEN 'Y' ELSE 'N' as `1`
....
FROM (
SELECT u.id,u.name,
SUM(CASE WHEN f.finger = '0' then '1' else '0' end) as `0`,
SUM(CASE WHEN f.finger = '1' then '1' else '0' end) as `1`,
....
from users u left join user_fingerprints f
on u.id= f.user_id
GROUP BY u.id,u.name) t