Sql server 在SQL Server中使用If-else或Case from-More表

Sql server 在SQL Server中使用If-else或Case from-More表,sql-server,if-statement,case-statement,Sql Server,If Statement,Case Statement,我需要从Log表中选择全部,并在需要时导入数据 如果UserGrade=1,这是管理员用户,我需要通过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 (s

我需要从
Log
表中选择全部,并在需要时导入数据

如果UserGrade=1,这是管理员用户,我需要通过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

这是您经过微调的查询。带逗号的表是旧样式,请避免使用逗号,并使用JOIN。在
案例中也使用
ELSE

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]

计算条件列表并返回多个可能的结果表达式之一

大小写表达式有两种格式:

  • 简单大小写表达式将表达式与一组简单大小写进行比较 表达式来确定结果

  • 搜索的大小写表达式 计算一组布尔表达式以确定结果。二者都 格式支持可选的ELSE参数

CASE可用于任何允许有效表达式的语句或子句中。例如,您可以在SELECT、UPDATE、DELETE和SET等语句中以及SELECT_list、in、WHERE、ORDER BY和HAVING等子句中使用CASE


你应该检查一下这个

谢谢你。我的问题解决了