Дополнительно
Можно ли использовать оператор 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 Incorrect syntax near '='.
118
8
Выражение
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.
например.
Edit: As per comments.
Попробуйте это:
Я думаю, что вам нужно два случае заявления:
Это происходит потому, что: <БР>
Это выглядит красиво
https://bytes.com/topic/sql-server/answers/881862-joining-different-tables-based-condition
Я взял ваш пример и редактировал его:
Взял DonkeyKong'ы например.
Проблема мне нужно использовать объявленную переменную. Это позволяет утверждать левой и правой стороны, что нужно сравнивать. Это для поддержки SSRS отчет, где разные поля должны быть связаны в зависимости от выбора пользователя.
В первоначальном случае устанавливает поле выбора на основе выбора и тогда я смогу установить поле мне нужно, чтобы матч на присоединиться.
Второе заявление, дело может быть добавлен к правой стороне при переменная нужна, чтобы выбирать из разных областей
Здесь я сравнил разницу в двух различных результирующих наборов. Надеюсь, что это может быть полезным.