如何编写查询以在同一列中显示多个输出

时间:2013-07-31 01:43:23

标签: sql sql-server-2008

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

2 个答案:

答案 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;