sql >> Base de Datos >  >> RDS >> Sqlserver

¿Puedo usar la instrucción CASE en una condición JOIN?

UN CASE expresión devuelve un valor de THEN parte de la cláusula. Podrías usarlo así:

SELECT  * 
FROM    sys.indexes i 
    JOIN sys.partitions p 
        ON i.index_id = p.index_id  
    JOIN sys.allocation_units a 
        ON CASE 
           WHEN a.type IN (1, 3) AND a.container_id = p.hobt_id THEN 1
           WHEN a.type IN (2) AND a.container_id = p.partition_id THEN 1
           ELSE 0
           END = 1

Tenga en cuenta que debe hacer algo con el valor devuelto, p. compárelo con 1. Su declaración intentó devolver el valor de una asignación o prueba de igualdad, ninguno de los cuales tiene sentido en el contexto de un CASE /THEN cláusula. (Si BOOLEAN fuera un tipo de datos, entonces la prueba de igualdad tendría sentido).