Как я могу написать SQL-запрос, который будет сортировать результаты на основе условия? - PullRequest
2 голосов
/ 18 июля 2009

Этот вопрос основан на этот другой вопрос моего и использует всю ту же основную информацию. Эта ссылка показывает мои макеты таблиц и основной смысл простого соединения.

Я хотел бы написать другой запрос, который выберет КАЖДУЮ запись из Table1 , и просто отсортирует их по тому, меньше ли значение Value, чем связанный порог.

Опять же, я ценю любого, кто готов нанести удар в этом. Базы данных никогда не были моей сильной стороной.

Ответы [ 3 ]

7 голосов
/ 18 июля 2009
SELECT t1.LogEntryID, t1.Value, t1.ThresholdID, 
    case when t1.Value < t2.threshold then 1 else 0 end as Rank
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.ThresholdID = t2.ThresholdID 
ORDER By Rank

Вы можете добавить DESC после ORDER By Rank, если хотите обратный порядок.

4 голосов
/ 18 июля 2009

Аналогично ответу от OrbMan, но я предпочитаю, чтобы CASE был явным в ORDER BY, чтобы вы не были вынуждены отображать свой заказ по столбцу.

SELECT
  t1.LogEntryID
 ,t1.Value
 ,t1.ThresholdID
FROM 
  Table1 t1
  JOIN Table2 t2 ON t2.ThresholdID = t1.ThresholdID
ORDER BY
  CASE WHEN t1.Value < t2.threshold
       THEN 1
       ELSE 0
  END ASC
0 голосов
/ 18 июля 2009

Просто мысль, но не могли бы вы использовать «пороговое значение» в качестве одного из возвращаемых столбцов?

Если бы вы это сделали (и столбцы были числовыми), вы также сможете увидеть, насколько близко (или далеко) от порога было значение.

что-нибудь положительное или 0 будет ниже порога, что-нибудь отрицательное не будет.

...