Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Posso usar a instrução CASE em uma condição JOIN?


Um CASE expressão retorna um valor do THEN parte da cláusula. Você poderia usá-lo assim:
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

Observe que você precisa fazer algo com o valor retornado, por exemplo. compare-o com 1. Sua instrução tentou retornar o valor de uma atribuição ou teste de igualdade, nenhum dos quais faz sentido no contexto de um CASE /THEN cláusula. (Se BOOLEAN fosse um tipo de dados, então o teste de igualdade faria sentido.)