Kan jeg bruke CASE-setningen i en JOIN-betingelse?
Følgende bilde er en del av Microsoft SQL Server 2008 R2 System Views. Fra bildet kan vi se at forholdet mellom sys.partitions
og sys.allocation_units
avhenger av verdien av sys.allocation_units.type
. Så for å bli med dem sammen ville jeg skrive noe som ligner på dette:
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
Men den øvre koden gir en syntaksfeil. Jeg antar at det er på grunn av CASE
-setningen.
Kan noen hjelpe til med å forklare litt?
Legg til feilmelding:
Msg 102, nivå 15, tilstand 1, linje 6 Feil syntaks i nærheten av '='.
Dette er bildet]1.
118
3
Et
CASE
uttrykk returnerer en verdi fraTHEN
delen av klausulen. Du kan bruke det på denne måten:Merk at du må gjøre noe med den returnerte verdien, f.eks. sammenligne den med 1. Din setning forsøkte å returnere verdien av en tilordning eller teste for likhet, og ingen av disse gir mening i sammenheng med en
CASE
/THEN
-setning. (HvisBOOLEAN
var en datatype, ville testen for likhet gi mening).I stedet gjør du ganske enkelt JOIN til begge tabellene, og i SELECT-klausulen,
Jeg foreslår at du går gjennom denne lenken Betingede sammenføyninger i SQL Server og https://stackoverflow.com/questions/8361183/t-sql-case-statement-in-a-join-on-clause
f.eks.
Rediger: I henhold til kommentarer.
Prøv dette: