我有2张桌子tbl_emp& tbl_EmpSal,其中Emp_Id是tbl_emp中的primary_key和tbl_EmpSal的外键,如下所示。
create table tbl_emp
( Emp_Id int,
Emp_Name Varchar(20)
)
insert into tbl_emp(Emp_Id,Emp_Name)
select 1,'aaa'
union
select 2,'bbb'
union
select 3,'ccc'
union
select 4,'ddd'
- 从tbl_emp
中选择*create table tbl_EmpSal
(Emp_id int,
EmpSal int)
insert into tbl_EmpSal
select 1,2000
union
select 2,4000
union
select 3,NULL
- 从tbl_EmpSal
中选择*现在我想编写SQL查询以显示输出如下:
EMP_Name EmpSal/Details
aaa 2000
bbb 4000
ccc NEW JOINEE
ddd Contractor
输出显示,对于tbl_EmpSal表中任何给定的Emp_id,如果EmpSal列为NULL,我们必须在EmpSal / Details列中将输出显示为“NEW JOINEE”。
当tbl_EmpSal表中任何给定的Emp_id都没有Row时,我们必须在EmpSal / Details列中显示输出为'Contractor'。
答案 0 :(得分:0)
SELECT e.Emp_Name,
[EmpSal/Details] = CASE
WHEN s.EmpSal > 0 THEN CONVERT(VARCHAR(12), s.EmpSal)
WHEN s.Emp_id IS NOT NULL THEN 'NEW JOINEE'
WHEN s.EmpSal IS NULL THEN 'Contractor'
END
FROM dbo.tbl_emp AS e
LEFT OUTER JOIN dbo.tbl_EmpSal AS s
ON e.Emp_id = s.Emp_id;
答案 1 :(得分:0)
这是一个相当棘手的问题。它涉及left outer join
并区分找到的NULL
值和缺少的匹配:
select Emp_Name,
(case when es.Emp_Id is NULL then 'Contractor'
when es.EmpSal is NULL then 'NEW JOINEE'
else cast(EmpSal as varchar(255))
end) as EmpSal_Details
from tbl_emp e left outer join
tbl_EmpSal es
on e.Emp_id = es.Emp_Id;