Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Puis-je utiliser l'instruction CASE dans une condition JOIN ?

Un CASE expression renvoie une valeur à partir de THEN partie de la clause. Vous pouvez l'utiliser ainsi :

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

Notez que vous devez faire quelque chose avec la valeur renvoyée, par ex. comparez-le à 1. Votre instruction a tenté de renvoyer la valeur d'une affectation ou d'un test d'égalité, dont aucun n'a de sens dans le contexte d'un CASE /THEN clause. (Si BOOLEAN était un type de données, alors le test d'égalité aurait du sens.)