如何在复杂条件下从表中选择值?

时间:2019-04-18 05:40:06

标签: sql sql-server

我有一个包含3列的表格:course_name, year, semester

现在,我想找出每年(2001年和2002年)每个学期(S1和S2)开设哪些课程。

我尝试写一个CASE WHENGROUP BY HAVING了一个小时,但没有得到正确的结果。

table_subjects

course_name| year| semester
Programming   2001   S1
Programming   2001   S2
Programming   2002   S1
Programming   2002   S2
Law           2001   S1
Law           2001   S2
Law           2002   S2
Science       2001   S1
Science       2001   S2
Management    2002   S2
AI            2001   S1
Database      2001   S1
Database      2001   S2
Database      2002   S1
Database      2002   S2

预期结果:

|course_name|
 Programming
 Database

2 个答案:

答案 0 :(得分:3)

您可以在下面尝试-

DEMO

select course_name
from t1 a
where year in (2001,2002) and exists (select 1 from t1 b where a.course_name=b.course_name
and a.year=b.year and semester in ('S1','S2') having count(distinct semester)=2)
group by course_name
having count(distinct year)=2 

输出:

course_name
Database
Programming

答案 1 :(得分:0)

1. SELECT myTable FROM MyTable myTable WHERE attr ~ '^[0-9\.]+$' AND CAST(attr AS long) > 39; //~ cannot be used in HQL query
2. SELECT myTable FROM MyTable myTable WHERE ISNUMERIC(attr) = 1 AND CAST(attr AS long) > 39; //cannot extract result set
3. SELECT myTable FROM MyTable myTable WHERE attr LIKE '^[0-9\.]+$' AND CAST(attr AS long) > 39; //cannot extract result set
4. SELECT myTable FROM MyTable myTable WHERE CAST(attr AS long) > 39; //cannot extract result set
5. SELECT myTable FROM MyTable myTable WHERE attr > '39'; //wrong data types - rows with 4 in the attr column are found