Tengo una base de datos de ubicaciones que puede tener entre 0 y 27 tipos de registros disponibles. Solo me interesa la presencia de 1 tipo de registro y quiero devolver verdadero o falso si ese registro existe. Intenté usar CASE WHEN pero el problema es que mis resultados se muestran verdaderos o falsos si existe un registro (que es el resultado deseado) y luego falso para todos los otros registros, por lo que obtengo varias filas con la misma identificación (que es no es lo que quiero). Código de muestra:

SELECT
Table1.LocationId
, CASE WHEN Table2.LogId = 8 THEN 'True' ELSE 'False' END AS 'Log8Avail'

El resultado deseado sería:

| LocationID |Log8Avail|
 ----------------------
| 1          | True    |
 ----------------------
| 2          | False   |
 ----------------------
| 3          | True    |
 ----------------------

Pero lo que obtengo actualmente es:

| LocationId | Log8Avail|
 -----------------------
| 1          | True     |
 ----------------------- 
| 1          | False    |
 -----------------------
| 1          | False    |
 -----------------------
| 2          | False    |
 -----------------------

Mi pregunta es, ¿cómo puedo ajustar mi consulta para que solo busque la presencia o ausencia del registro específico que me interesa?

0
Heather 12 ago. 2016 a las 23:41

2 respuestas

La mejor respuesta
SELECT t1.LocationId, 
       CASE WHEN t2.LogID IS NULL 
            THEN false 
            ELSE TRUE 
       END as Log8Avail
FROM Table1 t1
LEFT JOIN Table2 t2
      ON t1.id = t2.id
     AND t2.LogId = 8
0
Juan Carlos Oropeza 12 ago. 2016 a las 20:46
SELECT
Table1.LocationId
, CASE WHEN (SELECT COUNT(*) 
             FROM Table2 
             WHERE Table2.LogId = 8)>0 THEN 'True' ELSE 'False' 
  END AS 'Log8Avail'

¿Así?

0
StanislavL 12 ago. 2016 a las 20:46