Мога ли да използвам декларацията CASE в условие JOIN?
Следващото изображение е част от Microsoft SQL Server 2008 R2 System Views. От изображението се вижда, че връзката между sys.partitions
и sys.allocation_units
зависи от стойността на sys.allocation_units.type
. Така че, за да ги обединя, ще напиша нещо подобно на това:
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
Но горният код дава синтактична грешка. Предполагам, че това се дължи на оператора CASE
.
Може ли някой да помогне да обясни малко?
Добавете съобщение за грешка:
Msg 102, Level 15, State 1, Line 6 Неправилен синтаксис близо до '='.
118
3
Изразът
CASE
връща стойност от часттаTHEN
на клаузата. Можете да го използвате по следния начин:Обърнете внимание, че трябва да направите нещо с върнатата стойност, например да я сравните с 1. Вашето изречение се опитва да върне стойността на присвояване или да провери равенство, като нито едно от двете няма смисъл в контекста на клауза
CASE
/THEN``. (Ако
BOOLEAN` беше тип данни, тогава тестът за равенство би имал смисъл.)Предлагам ви да прегледате тази връзка Conditional Joins in SQL Server и https://stackoverflow.com/questions/8361183/t-sql-case-statement-in-a-join-on-clause
напр.
Редактиране: Съгласно коментарите.
Опитайте това: