У меня возникают трудности с выяснением запроса, сможет ли кто-нибудь помочь мне с этим?
Проблема: 4 столбца, которые представляют результаты для 2 отдельных тестов. Один из них взят в Великобритании, а другой в США. Оба теста - один и тот же, и мне нужно найти самый высокий и самый низкий балл для теста, принятого в обеих странах. Мне также нужно избегать использования подзапросов и временных таблиц. Был бы признателен за теоретические идеи и реальные решения проблемы.
Таблица выглядит так:
ResultID Test_UK Test_US Test_UK_Score Test_US_Score
1 1 2 48 11
2 4 1 21 24
3 3 1 55 71
4 5 6 18 78
5 7 4 19 49
6 1 3 23 69
7 5 2 98 35
8 6 7 41 47
Желаемых результатов я ищу:
TestID HighestScore LowestScore
1 71 23
2 35 11
3 69 55
4 49 21
5 98 18
6 78 41
7 47 19
Я пытался реализовать случай сравнения, но у меня все еще был подзапрос, чтобы получить окончательные результаты. Также попытался объединение, но он снова оказывается в подзапросе. Насколько я могу подумать, это будет случай, когда запрос, но не может придумать логику для этого, так как это требует совпадения идентификаторов тестов.
Спасибо!
То, что я пробовал и получил лучшие результаты (все еще неправильно)
select v.TestID,
max(case when Test_US_Score > Test_UK_Score then Test_UK_Score else null end) MaxS,
min(case when Test_UK_Score > Test_US_Score then Test_US_Score else null end) MinS
FROM ResultsDB rDB CROSS APPLY
(VALUES (Test_UK, 1), (Test_US, 0)
) V(testID, amount)
GROUP BY v.TestID
Extra
Ответ предоставлен M. Канарковский является идеальным решением. Я не эксперт по CTE, и немного смущен, как можно адаптировать этот запрос, чтобы он возвращал идентификатор результата строки, в которой были найдены min и max.
как то так:
TestID Result_ID_Max Result_ID_Min
1 3 6
2 7 1
3 6 3
Дополнительно 2
Желаемые результаты запроса приведут меня к следующему.
Два последних столбца представляют идентификаторы строк из исходной таблицы, в которых были найдены значения max и min.
TestID HighestScore LowestScore Result_ID_Of_Max Result_ID_Of_Min
1 71 23 3 6
2 35 11 7 1
3 69 55 6 3