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

Sql 如何编写查询以在同一列中显示多个输出,sql,sql-server-2008,Sql,Sql Server 2008,我有两个表tbl_emp和tbl_EmpSal,其中emp_Id是tbl_emp中的主键,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中

我有两个表tbl_emp和tbl_EmpSal,其中emp_Id是tbl_emp中的主键,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列中将输出显示为“新加入者”

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; 

当tbl_EmpSal表中没有任何给定Emp_id的行时,我们必须在EmpSal/Details列中以“承包商”的形式显示输出。

这是一个相当棘手的问题。它包括
左外连接
和区分找到的
NULL
值和缺少的匹配:

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

+1 . . . 如果Aaron和我都觉得这个问题很有趣,可以回答,那么就不值得投反对票。而且,您确实包含了生成问题所需表格的代码。@Gordon谁知道,人们出于各种原因否决了投票,但有很多潜在的原因可能会有人否决这篇文章,特别是在其原始形式下。