Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy mogę użyć instrukcji CASE w warunku JOIN?

CASE wyrażenie zwraca wartość z THEN część klauzuli. Możesz go użyć w ten sposób:

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

Zauważ, że musisz coś zrobić ze zwróconą wartością, np. porównaj to do 1. Twoja instrukcja próbowała zwrócić wartość przypisania lub testu na równość, z których żaden nie ma sensu w kontekście CASE /THEN klauzula. (Jeśli BOOLEAN był typem danych, wtedy test równości miałby sens).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawianie danych SQL Server do Salesforce.com

  2. Entity Framework Code First z synonimami SQL Server

  3. Najlepsze opcje monitorowania bazy danych dostępne dla Twojej firmy

  4. SQL Server — dynamiczna tabela przestawna — wstrzyknięcie SQL

  5. String_agg dla SQL Server przed 2017 r.