SQL делает запрос с новыми значениями столбцов в зависимости от фиксированных значений - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть две таблицы table1 и table2

таблица1 имеет столбцы:

id name  value
1  name1 0.5
2  name2 1.9
3  name3 2.6
4  name4 0.2
....
999 name999 4.7

таблица2 имеет столбцы

id risk   value
1  low    0.5
2  medium 1.5
3  high   2.5

Я хочу создать результат, например: (низкий> = 0,5 и <1,5, средний> = 1,5 и <2,5, высокий> 2,5) и от более высокого значения к меньшему значению

1  name999 high
2  name3 high
3  name2 medium
4  name1 low

Добавление

Еще один вопрос:

таблица1 имеет столбцы:

id name  value
1  name1 0.5
2  name2 1.9
3  name3 2.6
4  name4 0.2
....
999 name999 4.7


Предположим, что в имени столбца у нас есть test1 и test2, и мы хотим, чтобы в результате test1 всегда был очень низким, а test2 - очень высоким.

1  test2   very high
2  name999 high
3  name3 high
4  name2 medium
5  name1 low
6  test1 very low


нужно ли редактировать table2 также для упорядочения вышеуказанного результата по риску?

Ответы [ 2 ]

1 голос
/ 01 сентября 2011
SELECT a,id
     , a.name
     , b.risk 
FROM table1 AS a
  JOIN table2 AS b
    ON b.value = ( SELECT MAX(bm.value)
                   FROM table2 AS bm
                   WHERE bm.value <= a.value
                 )
ORDER BY a.value DESC
1 голос
/ 01 сентября 2011

Это было бы намного проще, если бы вы указали верхнюю и нижнюю границы в таблице2 вместо того, чтобы пытаться выполнить какой-либо поиск ближайшего числа. Это может быть так просто, как

SELECT a.name, b.risk FROM table1 a
LEFT JOIN table2 b ON a.value BETWEEN b.lower AND b.upper

Если вы настаиваете на использовании поиска по ближайшему номеру, вы можете определить, какое значение из таблицы1 ближе всего к таблице2, написав выборку, включающую ABS(a.value - b.value), упорядочив по этому полю и выбрав верхнюю 1, но простого способа нет сделать соединение в этой точке. Скорее всего, вы будете вставлять записи в временную таблицу из курсора, выбирая ее из временной таблицы и затем удаляя ее - большой неприятный беспорядок, которого можно избежать, просто сделав одно небольшое изменение во второй таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...