2014-09-09 5 views
0

Мне нужно запросить один и тот же столбец для разных значений в зависимости от другого реляционного значения.SQL-запрос одного столбца дважды

Таблица устанавливается следующим образом: athleteID, meetName, именем_события, оценка

События все равно, но есть разные Встречает и мой запрос должен возвращать: помощь, событие, оценка от meetName = «whatever1» , оценка от meetname = 'whatever2'

Ive пробовал каждый базовый способ об этом, но не может этого сделать. Я, наконец, попытался

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 
+0

Очевидно, что подзапросы возвращаются более одного ряда .. Является ли это ожидалось ? – masum7

+0

Вы можете привести пример данных образца (ожидаемый результат) – masum7

+0

Я добавил ожидаемый результат – rambossa

ответ

0

Я хотел бы добавить, что Natural Inner Join - это то, что должно было быть сделано здесь для базового (некоммерческого) sql.

Синтаксис был бы: select * from (subquery1) NIJ (subquery2)

подзапросов Синтаксис:

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

и

select athleteID, score as SnowScore from performances, NIJ athletes where meet =‘SnowFlake’ and event=‘beam’ 
0

не пробовал, но это дает представление ...:

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 
1

не предусмотрен RDMS, мой ответ с SQL Server:

Если вы хотите использовать подзапрос, вам нужно ссылаться на atherleteID и eventName, также если было несколько результатов (непонятно из вашего вопроса, но я предполагаю, что atheletes соревнуются на нескольких встречах) вам нужно будет заполнить.

Там может быть лучше, но как простой один от запроса я бы, наверное, это нравится:

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 будет меняться с течением времени, вы можете создайте динамические сводные запросы, хорошим примером я нашел here

+0

Это сработало, спасибо за пример! – rambossa

Смежные вопросы