Следующее изображение является частью системных представлений Microsoft SQL Server 2008 R2. Из изображения видно, что отношения между 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
заявления. Может кто-нибудь помочь объяснить немного?
Добавить сообщение об ошибке:
Сообщение 102, уровень 15, состояние 1, строка 6 Неверный синтаксис рядом с '='.
sql
sql-server
join
case
Просто ученик
источник
источник
Ответы:
CASE
Выражение возвращает значение изTHEN
части пункта. Вы можете использовать это так:Обратите внимание, что вам нужно что-то сделать с возвращаемым значением, например сравнить его с 1. Ваше утверждение попыталось вернуть значение присваивания или проверки на равенство, что не имеет смысла в контексте предложения
CASE
/THEN
. (Если быBOOLEAN
был тип данных, тогда проверка на равенство имела бы смысл.)источник
= 1
на= 0
, но я не думаю, что вам понравится результат.Я предлагаю вам пройти по этой ссылке Условные объединения в SQL Server и Оператор T-SQL в предложении JOIN ON
например
Изменить: в соответствии с комментариями.
источник
conditional join
значит? Каждое соединение (исключая крест) является условным. Чем этот случай отличается от любого другого? Ваш образец имеет внутреннее соединение с условием, а также запрос OPs имеет соединение с условием.OR
?OR
». ИспользованиеOR
- это всего лишь один из способов его реализации.OR
и 2ANDs
или с 1CASE
. Это обычный запрос, который ничем не отличается от других.Попробуй это:
источник
Я думаю, что вам нужно два случая:
Это потому что:
источник
Я взял твой пример и отредактировал его:
источник
Это кажется хорошим
https://bytes.com/topic/sql-server/answers/881862-joining-different-tables-based-condition
источник
Да, ты можешь. Вот пример.
источник
Взял пример ДонкиКонга.
Проблема в том, что мне нужно было использовать объявленную переменную. Это позволяет указать вашу левую и правую часть того, что вам нужно сравнить. Это для поддержки отчета SSRS, где различные поля должны быть связаны на основе выбора пользователем.
Первоначальный случай устанавливает выбор поля на основе выбора, а затем я могу установить поле, которое мне нужно сопоставить для объединения.
Второй оператор case может быть добавлен для правой части, если переменная нужна для выбора из разных полей
источник
Здесь я сравнил разницу в двух разных наборах результатов:
источник