0

我有 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'

--select * from 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

--select * from tbl_EmpSal

现在我想编写 SQL 查询来显示如下输出:

EMP_Name   EmpSal/Details

aaa     2000

bbb     4000

ccc     NEW JOINEE

ddd         Contractor

输出显示,对于 tbl_EmpSal 表中的任何给定 Emp_id,如果 EmpSal 列为 NULL,我们必须在 EmpSal/Det​​ails 列中将输出显示为“NEW JOINEE”。

当 tbl_EmpSal 表中的任何给定 Emp_id 没有 Row 时,我们必须在 EmpSal/Det​​ails 列中将输出显示为“Contractor”。

4

2 回答 2

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; 
于 2013-07-31T01:48:33.633 回答
0

这是一个相当棘手的问题。它涉及 aleft 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;
于 2013-07-31T01:49:35.673 回答