我创建了两个表变量(每个变量有一列):
Declare @CoursePrereq TABLE (Prereq char(6))
Declare @TakenCourses TABLE (Taken char(6))
基本上,我想测试是否所有必备课程都存储在@TakenCourses表的take列中。如果是,那意味着已经采取了先决条件,并且我希望返回1(对于true)。显然,如果来自@CoursePrereq的所有值都不在@TakenCourses中,我想要0。
有没有办法测试Taken Column中的这些Prereq Column值是否为ALL?我已经尝试了一些东西(与前1个循环,if语句存在)并且我被卡住了。我可以得到一些帮助吗?
提前致谢!
答案 0 :(得分:1)
您可以使用NOT EXISTS
在Prereq
列中查找缺失的Taken
值。然后使用CASE
表达式根据结果集的计数输出1
和0
。
<强>查询强>
SELECT CASE WHEN COUNT(*) > 0 THEN 0 ELSE 1 END AS [Status]
FROM @CoursePrereq t
WHERE NOT EXISTS (
SELECT 1 FROM @TakenCourses
WHERE t.Prereq = Taken
);
答案 1 :(得分:1)
尝试使用exists:
Declare @CoursePrereq TABLE (Prereq char(6))
Declare @TakenCourses TABLE (Taken char(6))
insert into @CoursePrereq values ('1'),('2'),('3')
insert into @TakenCourses values ('1'),('2'),('3'),('4')
select case when count(*) > 1 then 1 else 0 end as 'MATCHING' from @CoursePrereq
where exists
(select * from @TakenCourses where Prereq = Taken)