Мне нужно выбрать все из таблицы Log
и импортировать данные, когда Case
Если UserGrade = 1, это пользователь с правами администратора, и мне нужно выбрать имя администратора по журналу.
Если UserGrade = 2, это учитель, и мне нужно выбрать имя учителя по логу.
Если UserGrade = 3, это пользователь-студент, и мне нужно выбрать имя учащегося в журнале.
Я пробую это
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.
Вам следует проверить эту ссылку
Похожие вопросы
Новые вопросы
sql-server
Microsoft SQL Server — это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков Microsoft SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. д.). Не используйте этот тег для вопросов по программному обеспечению и разработке мобильных устройств, если только он не связан напрямую с базой данных.