Sql 如何编写查询以在同一列中显示多个输出
我有两个表tbl_emp和tbl_EmpSal,其中emp_Id是tbl_emp中的主键,tbl_EmpSal的外键,如下所示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中
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谁知道,人们出于各种原因否决了投票,但有很多潜在的原因可能会有人否决这篇文章,特别是在其原始形式下。