Я использую SAP HANA, поэтому есть несколько частей языка SQL, которые нельзя использовать (таблица cte, несколько ключевых слов ...). Я использую запрос, который дает мне результаты, связанные с двумя баллами, строки сортируются в соответствии с первой колонкой оценки, а затем во второй столбец. У меня есть много строк, которые имеют небольшую разницу для первого балла и большую разницу для второго балла, поэтому я хотел бы заказать запросы в соответствии со вторым счетом , но только тогда, когда разница между строкой и следующей строкой не превышает порогового значения. Счет 2 может быть пустым.SQL-запрос в зависимости от нескольких столбцов в соответствии с порогом
На данный момент мой код выглядит следующим образом:
select
"name",
"score1",
"score2",
LEAD("score1", 1) over (order by "score1" desc, "score2" desc) as "nextscore1"
from
//myrequest generating results
group by
"name",
"score1",
"score2"
order by
case when ("nextscore1" IS NOT NULL) AND ("score1" - "nextscore1" < 0,1) then "score2" else "score1" END DESC,
case when ("nextscore1" IS NOT NULL) AND ("score1" - "nextscore1" < 0,1) then "score1" else "score2" END DESC
Он всегда выводится результаты меня, отсортированный по одной, а затем другому столбцу, но не смешанных родов я бы ожидать. Спасибо за помощь.
@GordonLinoff HANA - правильный тег. Это не одна из бывших технологий Sybase. –
ORDER не работает по линии. Он работает для всего набора строк, сгенерированных таким образом, ваше условие будет согласовано только один раз. Поэтому я рекомендую вам добавить эти case-выражения в ваш оператор select, а затем упорядочить по этим новым столбцам. –
Спасибо за ваше объяснение, так как мне нужен только порядок, а не оценка значений, Я нашел обходное значение округления значений score1, чтобы собрать их вместе, а затем заказать по счету1, score2 – user2233777