SQL结果:带案例语句的员工姓名和位置
在SQL中,如何将一个表中的建筑名称与另一个表的员工id进行匹配?当我运行查询时,如下图所示,建筑名称不会显示在结果中。它将其留空,如脚本的Case语句中所述。我认为这不应该发生。我附上了表格示例和预期结果的图像SQL结果:带案例语句的员工姓名和位置,sql,join,case-statement,Sql,Join,Case Statement,在SQL中,如何将一个表中的建筑名称与另一个表的员工id进行匹配?当我运行查询时,如下图所示,建筑名称不会显示在结果中。它将其留空,如脚本的Case语句中所述。我认为这不应该发生。我附上了表格示例和预期结果的图像 SELECT DISTINCT emp.[emp_ln], emp.[emp_fn], empb.[emp_id], 'BUILDING_NAME' = CASE WHEN emp.[emp_id] = empb.[emp_id]
SELECT DISTINCT
emp.[emp_ln],
emp.[emp_fn],
empb.[emp_id],
'BUILDING_NAME' = CASE WHEN emp.[emp_id] = empb.[emp_id]
THEN bld.[bld_name] ELSE ''
END
FROM Employees as emp
JOIN [dbo].[empbld] as empb on empb.[emp_id] = emp.[emp_id]
JOIN [dbo].[bl] as bld on bld.[bld_num] = empb.[bld_num]
Where emp.[emp_status] = ‘A’
Group by
emp.[emp_ln],
emp.[emp_fn],
empb.[emp_id],
bld.[bld_name]
没有任何聚合函数,因此不需要使用
groupby
子句
从预期结果和表模式来看,我认为当
因为条件emp.[emp\u id]=empb.[emp\u id]
与join
语句中的大小写总是相等的
JOIN [dbo].[empbld] as empb on empb.[emp_id] = emp.[emp_id]
您可以直接从bl
表中获取bld\u name
SELECT
emp.[emp_ln],
emp.[emp_fn],
empb.[emp_id],
bld.bld_name
FROM Employees as emp
JOIN [dbo].[empbld] as empb on empb.[emp_id] = emp.[emp_id]
JOIN [dbo].[bl] as bld on bld.[bld_num] = empb.[bld_num]
Where emp.[emp_status] = ‘A’
SQLFIDLE:您将员工加入empbld
确保emp.[emp\u id]
始终等于empb.[emp\u id]
,因此不需要案例陈述。您也不需要分组,因为您没有聚合任何内容。@squillman我想我遗漏了一些信息。我只需要员工编号和建筑编号匹配的建筑名称。那么,我需要案件陈述吗?那没有意义。根据您的样本数据,员工编号(emp_id?)和建筑编号永远不匹配。如果您指的是emp_id列,则不需要使用大小写,因为联接只返回emp_id值匹配的行。@squillman我试图使用一个示例查询,但我现在意识到这并不完全代表我当前正在处理的查询。我要试着自己解决这个问题。非常感谢。