Kan ik een CASE statement gebruiken in een JOIN voorwaarde?
De volgende afbeelding is een onderdeel van Microsoft SQL Server 2008 R2 System Views. Uit de afbeelding kunnen we zien dat de relatie tussen sys.partitions
en sys.allocation_units
afhankelijk is van de waarde van sys.allocation_units.type
. Dus om ze samen te voegen zou ik iets schrijven dat hier op lijkt:
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)
THEN a.container_id = p.hobt_id
WHEN a.type IN (2)
THEN a.container_id = p.partition_id
END
Maar de bovenste code geeft een syntaxis fout. Ik denk dat dat's vanwege het CASE
statement.
Kan iemand helpen om het een beetje uit te leggen?
Foutmelding toevoegen:
Msg 102, Level 15, State 1, Line 6 Onjuiste syntaxis bij '='.
118
3
Een
CASE
expressie retourneert een waarde uit hetTHEN
gedeelte van de clausule. Je zou het zo kunnen gebruiken:Merk op dat je iets moet doen met de geretourneerde waarde, b.v. vergelijken met 1. Je verklaring probeerde de waarde van een toewijzing terug te geven of te testen op gelijkheid, wat geen van beide zinvol is in de context van een
CASE
/THEN
clausule. (AlsBOOLEAN
een datatype was, dan zou de gelijkheidstest wel zinvol zijn).Ik stel voor dat je deze link Conditional Joins in SQL Server doorneemt en https://stackoverflow.com/questions/8361183/t-sql-case-statement-in-a-join-on-clause
bijv.
Bewerken: Zoals in de opmerkingen.
Probeer dit eens: