Использование If else или Case из More Table в SQL Server
Мне нужно выбрать все из Log
Таблица и импорт данных, когда дело
Если UserGrade =1, это Admin User, и мне нужно выбрать Admin Name по Log.User
Если UserGrade =2, это пользователь учителя, и мне нужно выбрать имя учителя по Log.User
Если UserGrade =3, это пользователь ученика, и мне нужно выбрать имя ученика по Log.User
Я пытаюсь это
select L.[UserID],L.[UserGrade],L.[Operation],L.[OpDate],
case
when L.[UserGrade]=2 then (select teacherNAME from Teacher ,[Log] where teacherID=[Log].[UserGrade] )
when L.[UserGrade]=1 then (select [Adm_Name] from Administrator ,[Log] where [Adm_ID]=[Log].[UserGrade] )
when L.[UserGrade]=3 then (select [studentNAME] from student ,[Log] where[studentID]=[Log].[UserGrade] )
end
from [Log] L ,Teacher , Administrator ,student
2 ответа
Это ваш точный запрос. Таблицы с запятыми - это старый стиль, избегайте их и используйте JOIN. Также используйте ELSE
в CASE
SELECT L.[UserID], L.[UserGrade], L.[Operation], L.[OpDate],
CASE L.[UserGrade]
WHEN 2 THEN T.[teacherNAME]
WHEN 1 THEN A.[Adm_Name]
WHEN 3 THEN S.[studentNAME]
ELSE '' END [Name]
FROM [Log] L
LEFT JOIN Teacher T ON T.[teacherID] = L.[UserGrade]
LEFT JOIN Administrator A ON A.[Adm_ID] = L.[UserGrade]
LEFT JOIN student S ON S.[studentID] = L.[UserGrade]
Оценивает список условий и возвращает одно из нескольких возможных выражений результата.
Выражение CASE имеет два формата:
Простое выражение CASE сравнивает выражение с набором простых выражений для определения результата.
Найденное выражение CASE оценивает набор логических выражений для определения результата. Оба формата поддерживают необязательный аргумент ELSE.
CASE может использоваться в любом выражении или предложении, которое допускает допустимое выражение. Например, вы можете использовать CASE в таких операторах, как SELECT, UPDATE, DELETE и SET, а также в таких предложениях, как select_list, IN, WHERE, ORDER BY и HAVING.
Вы должны проверить эту ссылку