Мне нужно выбрать все из таблицы 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
1
HisHam Ashraf 30 Апр 2016 в 08:00

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]
1
Arulkumar 30 Апр 2016 в 05:18

Оценивает список условий и возвращает одно из нескольких возможных выражений результата.

Выражение CASE имеет два формата:

  • Простое выражение CASE сравнивает выражение с набором простых выражения для определения результата.

  • Искомое выражение CASE оценивает набор логических выражений для определения результата. И то и другое форматы поддерживают необязательный аргумент ELSE.

CASE можно использовать в любом операторе или предложении, допускающем допустимое выражение. Например, вы можете использовать CASE в таких операторах, как SELECT, UPDATE, DELETE и SET, а также в таких предложениях, как select_list, IN, WHERE, ORDER BY и HAVING.

Вам следует проверить эту ссылку

2
R C 30 Апр 2016 в 05:18