age | name | course | score
_________________________
10 |James | Math | 10
10 |James | Lab | 15
12 |Oliver | Math | 15
13 |William | Lab | 13
我想选择记录,其中数学>=10和实验室>11我写这个查询
select * from mytable
where (course='Math' and score>10) and (course='Lab' and score>11)
但是这个查询不返回任何记录。
我想要这个结果
age | name
____________
10 |James
其中条件(math>=10和lab>11)是动态生成的,可能有2个或100个以上的条件。。。
请帮帮我
5条答案
按热度按时间wnvonmuf1#
如果需要名称,请使用聚合和having子句:
如果需要详细记录,请使用窗口函数:
sql server不支持
count(distinct)
作为一个窗口函数。但是你可以用dense_rank()
两次。91zkwejq2#
您可以查询同时满足这两个条件的记录—这是不可能的,因为每个记录都有一个课程。
您需要一个适用于具有相同名称的行的条件,因此建议改为聚合:
ddhy6vgd3#
如果您将问题表述为:
选择所有唯一的(姓名、年龄)组合
有一行分数>=10的课程数学
有一排分数大于11的课程实验室
然后您可以将其转换为sql中非常类似的内容:
8mmmxcuj4#
我认为要么你的数据要么你的条件不适合你的输出。尽管基于您的条件,您可以单独使用您的条件,然后从两个选择中使用intersect并获取过滤后的数据。就像下面的代码。
kt06eoxx5#
您可以使用共相关子查询编写查询