选择同一列两次,但条件不同
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择同一列两次,但条件不同相关的知识,希望对你有一定的参考价值。
我想显示员工的姓名和编号以及老板的编号和姓名,如下所示:
只有一张桌子:
我到目前为止已经尝试过:
SELECT
ID,
Name,
Boss,
(SELECT Name FROM Employees WHERE ID IN (SELECT Boss FROM Employees))
FROM Employees
但是它给我一个错误:
“子查询返回了多个值。当子查询遵循=,!=,,> =或将子查询用作表达式“
Select a.ID, a.Name, b.ID as Boss, b.Name as BossName
from Employees A
left join Employees B
on a.Boss = b.ID
TOP
子句返回第一个结果。您还需要将其加入主表:SELECT
e.ID,
e.Name,
e.Boss,
(SELECT top 1 Name FROM Employees b where b.ID = e.Boss) as BossName
FROM Employees e
这里是一段代码。
select
(Select count(b.TITLE) from SalesLT.Customer b Where Title LIKE 'Mr%') as women
,(Select count(c.TITLE) from SalesLT.Customer c Where Title LIKE 'Ms%') as men
,(Select count(d.TITLE) from SalesLT.Customer d Where Title NOT LIKE 'Ms%' AND Title NOT LIKE 'Mr%' ) as unidentified
,count(a.TITLE) as Total
from SalesLT.Customer a
结果:
SELECT
E.ID,
E.Name,
E.Boss,
(SELECT Name FROM Employees WHERE ID = E.Boss) AS BossName
FROM Employees E
原始查询的问题是子查询中的条件不取决于特定记录。子查询返回每个人的名字,这些人是别人的老板。请注意,此解决方案通常比联接具有更差的性能,因为它必须为每个项目执行子查询。尽管结果与连接相当,但许多优化器仍未意识到这一点,因为它们不涉及子查询。
以上是关于选择同一列两次,但条件不同的主要内容,如果未能解决你的问题,请参考以下文章