У меня есть эта таблица:
BP1 BP2
-----------------------------
140 80
153 88
90 162
98 214
98 69
Я хочу организовать его в 2 столбца: один с высоким BP, а другой с низким BP:
Ожидаемый результат:
BP_High BP_Low
---------------------------------
140 80
153 88
162 90
214 98
98 69
*все значения целые
Я пробовал:
SELECT CASE WHEN BP1 > BP2 THEN BP1
WHEN BP1 < BP2 THEN BP2 END BP_High,
CASE WHEN BP1 > BP2 THEN BP2
WHEN BP1 < BP2 THEN BP1 END BP_Low
FROM Table
а то не получается...у меня все перепуталось:
BP_High BP_Low
---------------------------------
140 80
153 88
90 162
98 214
98 69
Я также пробовал:
SELECT CASE WHEN BP1 > BP2 THEN BP1
ELSE BP2 END BP_High,
CASE WHEN BP1 > BP2 THEN BP2
ELSE BP1 END BP_Low
FROM Table
Есть ли другой способ, чем CASE WHEN, чтобы получить наибольшее/наименьшее значение из 2 столбцов?
похоже, код работает так, как вы хотите, поэтому в вашем вопросе чего-то не хватает, из-за чего он ведет себя по-другому для вас: dbfiddle.uk/5QDjTpjy
Ваша третья попытка почти верна, и вы действительно можете использовать выражения CASE
здесь:
SELECT
CASE WHEN BP1 > BP2 THEN BP1 ELSE BP2 END AS BP_High,
CASE WHEN BP1 < BP2 THEN BP1 ELSE BP2 END AS BP_Low
FROM yourTable;
В других базах данных, таких как MySQL, Postgres или SQLite, доступны скалярные функции LEAST()
и GREATEST()
. В этих базах данных ваш запрос может быть упрощен до:
SELECT
GREATEST(BP1, BP2) AS BP_High,
LEAST(BP1, BP2) AS BP_Low
FROM yourTable;
SQL Server 2022 поддерживает обе функции.
@Zhorov Ну, пришло время ... надеюсь, они также представят лучшую поддержку регулярных выражений :-)
Вы уверены, что столбцы являются int, а не varchars или подобными?