Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Posso usare l'istruzione CASE in una condizione JOIN?

Un CASE espressione restituisce un valore da THEN parte della clausola. Potresti usarlo così:

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

Nota che devi fare qualcosa con il valore restituito, ad es. confrontalo con 1. La tua affermazione ha tentato di restituire il valore di un compito o di verificare l'uguaglianza, nessuno dei quali ha senso nel contesto di un CASE /THEN clausola. (Se BOOLEAN era un tipo di dati, quindi il test di uguaglianza avrebbe senso.)