Pregunta

Tengo una consulta con una combinación en una tabla que contiene varias columnas de verdadero / falso. Puedo hacer cumplir DISTINCT y GROUP BY para asegurar que sólo única fila única se volvió, sin embargo los verdaderos falsos filas / no se comportan como era previsible, ejemplo:

**Table 1**
loc_id name
-------------
1      a
2      b
3      c
4      d

**Table 2**
prod_id loc_id value
-------------
1       1      abc
2       1      bcd
3       1      def
4       2      fgh

**Table 3**
prod_id flag
-------------
1       0
2       0
3       1
4       1

SELECT DISTINCT name, flag from table1
LEFT JOIN table3 ON table3.prod_id = table2.prod_id
LEFT JOIN table2.loc_id=table1.loc_id

Esto me da filas que contienen una lista de nombres loc. Sin embargo, los rendimientos de columnas bandera de filas múltiples veces, lo que me gustaría hacer es combinar estas filas de manera que si hay más de uno, y contienen ambos 0 y 1 de la consulta devolverá sólo una fila con el indicador establecido a 1. Si múltiple filas contienen 0, devolverá 0 para esa fila ... He intentado utilizar GROUP BY nombre, que devuelve filas únicas espalda, sin embargo, me he dado cuenta de que para las filas duplicadas que tienen ambos 0 y 1 juego en la columna de la bandera se devolverá 0?

Cualquier ayuda apreció

¿Fue útil?

Solución

A medida que desee 1 cuando hay un 1, y 0 si no es así, un MAX (bandera) debería ser suficiente.

SELECT name, MAX(flag) from table1
LEFT JOIN table3 ON table3.prod_id = table2.prod_id
LEFT JOIN table2.loc_id=table1.loc_id
GROUP BY name
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top