Im haciendo un SQL bastante grande, así que me disculpo que no puede proporcionar un mayor ejemplo de mis tablas.Mysql IF IN GROUP_CONCAT breaks
SELECT
customer_id,
agreement_id,
if('network' IN (GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR ',') ),
'Yes','No') as networkservice
FROM customers
INNER JOIN agreement USING(customer_id)
INNER JOIN services USING(agreement_id)
GROUP BY customer_id
Un cliente puede tener un acuerdo y un acuerdo puede tener muchos servicios. Lo que estoy tratando de averiguar es si 'red' es uno de los servicios en ese acuerdo.
Dado que GROUP_CONCAT devuelve una lista separada por comas, se siente perfecto para mi caso. Pero no puedo hacer que funcione y me estoy quedando sin ideas.
Si sólo hay un servicio y que el servicio es 'red' que devuelve sí, pero si hay más de uno se vuelve Nº
Si uso (INT) service_id lugar no hace ninguna diferencia, a menos que el INT Estoy buscando es el primero en la lista. Pero eso es solamente para INT, si la 'red' es el primero en la lista vuelve Nº
He intentado:
if('network' IN (CAST(GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR ' ') AS CHAR) ),
'Yes','No')
Y
if('network' IN (concat('\'',
GROUP_CONCAT(DISTINCT services.service_code
SEPARATOR '\', \''),
'\'')), 'Yes','No')
puedo proporcionar más ejemplos si mi explicación suena confusa
Gracias.
Gracias, nunca pensé en usar SUM. Lo usé así 'IF (sum (if (service.service_code = 'network', 1, 0))> 0, 'Yes', 'No) como networkservice' y funciona muy bien. – Cleric