Saltar al contenido

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

Siéntete libre de divulgar nuestro espacio y códigos en tus redes, ayúdanos a aumentar nuestra comunidad.

Solución:

A CASE expresión devuelve un valor de la 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, por ejemplo, compararlo 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).

En su lugar, simplemente ÚNASE a ambas tablas y, en su cláusula SELECT, devuelva los datos de la que coincida:

Le sugiero que vaya a través de este enlace Uniones condicionales en SQL Server y declaración de caso T-SQL en una cláusula JOIN ON

p.ej

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

Editar: según los comentarios.

No puede especificar la condición de unión como lo está haciendo. Verifique la consulta anterior que no tiene ningún error. Saqué la columna común hacia arriba y el valor de la columna derecha se evaluará con la condición.

Prueba esto:

...JOIN sys.allocation_units a ON 
  (a.type=2 AND a.container_id = p.partition_id)
  OR (a.type IN (1, 3) AND a.container_id = p.hobt_id)

Aquí puedes ver las reseñas y valoraciones de los usuarios

Más adelante puedes encontrar las explicaciones de otros desarrolladores, tú igualmente tienes la opción de dejar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *