SQL查询同一列两次

SQL查询同一列两次,sql,Sql,我需要根据另一个关系值为不同的值查询同一列 表的设置如下:athleteID、meetName、eventName、score 事件都是相同的,但有不同的会议,我的查询需要返回:aid、event、来自meetName的分数='whatever1',来自meetName的分数='whatever2' 我试过各种基本的方法来完成这件事,但都做不到。我最后试过了 SELECT distinct athleteID, event, (select score from performances whe

我需要根据另一个关系值为不同的值查询同一列

表的设置如下:athleteID、meetName、eventName、score

事件都是相同的,但有不同的会议,我的查询需要返回:aid、event、来自meetName的分数='whatever1',来自meetName的分数='whatever2'

我试过各种基本的方法来完成这件事,但都做不到。我最后试过了

SELECT distinct athleteID, event,
(select score from performances where meetName='Snowflake') as SnowScore,
(select score from performances where meetName='Valentine') as ValScore,
from performances
where event='high jump'
返回:单行子查询返回多行

我的预期结果如下:

aid, event, SnowScore, ValScore
1 , high jump, 6,  8
2 , high jump, 3,  5
3, high jump, 8, 10

没有尝试过,但它给出了想法…:

SELECT athleteID, event,
sum(case when meetName='Snowflake' then score else 0 end) as SnowScore,
sum(case when meetName='Valentine' then score else 0 end) as ValScore,
from performances
group by athleteID, event

没有规定RDMS,我的答案是使用SQL Server:

如果您想使用子查询,您需要引用AtherleId和eventName,如果有多个结果(您的问题不清楚,但我假设运动员在多次比赛中竞争),您也需要聚合

可能有更好的方法,但作为一个简单的一次性查询,我可能会这样做:

SELECT athleteID, eventName,
sum(CASE WHEN meetName='Snowflake' THEN score ELSE 0 END) as SnowScore,
sum(CASE WHEN meetName='Valentine' THEN score ELSE 0 END) as ValScore
FROM performances
GROUP BY atheleteID,eventName

一个更好的长期解决方案是使用PIVOT,如果meetNames会随着时间的推移而改变,那么您可以创建动态PIVOT查询,我发现的一个好例子是

我想补充一点,自然内部连接是基本(非商业)sql应该做的

语法应该是:
select*from(subquery1)NIJ(subquery2)

子查询语法:

select athleteID, score as ValScore from performances, NIJ athletes where meet =‘Valentin’ and event=‘beam’


很明显,子查询返回了多行。。它是预期的吗?你可以给出我添加了预期结果的样本数据(预期结果)的示例好的。。但为什么SnowScore和ValScore会有所不同。。?我是说根据6/3/8的情况?
select athleteID, score as SnowScore from performances, NIJ athletes where meet =‘SnowFlake’ and event=‘beam’