【发布时间】:2017-11-02 09:47:27
【问题描述】:
对于每一年,对于每位员工,我想列出该员工已提交的评论的状态,或者“未启动”以防员工未提交该年度的评论。
这个问题很难用语言表达,所以我会尝试通过举例来解释它:
create table #employees
(
empid int,
name varchar(100)
)
Create table #review
(
empid int,
ryear int,
status varchar(20)
)
insert into #review values(1,2016,'S2')
insert into #review values(2,2016,'S2')
insert into #review values(2,2017,'S1')
insert into #review values(3,2017,'S2')
insert into #employees values(1,'jack')
insert into #employees values(2,'mack')
insert into #employees values(3,'rack')
insert into #employees values(4,'tack')
查询错误
select a.empid
,a.name
,b.ryear
,case isnull(b.status,'')
when ''
then 'Not Initiated'
else status
end as status
from #employees as a
left join #review as b
on a.empid = b.empid
and b.ryear in(select distinct
ryear
from #review
);--something like that
预期结果:
+-------+------+-------+----------------+
| empid | name | ryear | status |
+-------+------+-------+----------------+
| 1 | jack | 2016 | S2 |
| 1 | jack | 2017 | not initiated |
| 2 | mack | 2016 | S2 |
| 2 | mack | 2017 | S1 |
| 3 | rack | 2016 | not initieated |
| 3 | rack | 2017 | S2 |
| 4 | tack | 2016 | Not Initiated |
| 4 | tack | 2017 | Not Initiated |
+-------+------+-------+----------------+
【问题讨论】:
-
这个问题很难用语言表达,所以我试着举例说明一下 -- 谢谢,这正是如何提出所有问题。
-
@iamdave 你在讽刺吗?
-
一点也不,你的问题很完美! :)
-
@iamdave 哦,谢谢
-
不客气,但他说的有道理。无论如何,如果我没记错的话,对于每一年,对于每个员工,您都会列出他提交的评论的状态,或者如果他没有提交,则为“未启动”,对吗?
标签: sql sql-server sql-server-2008 tsql join