如何编写将根据条件对结果进行排序的SQL查询?

时间:2009-07-17 20:15:41

标签: sql sql-order-by

此问题基于我的 this other question ,并使用了所有相同的基本信息。该链接显示了我的表格布局和简单连接的基本要点。

我想编写另一个查询,从 Table1 中选择每条记录,然后根据Value是否小于链接阈值对它们进行排序。

再次,我感谢任何愿意接受这一点的人。数据库从来都不是我的强项。

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

与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

答案 2 :(得分:0)

只是一个想法,但你不能使用'threshold - value'作为你的返回列之一吗?

如果您这样做(并且列是数字的),您还可以看到该值与阈值的接近程度(或远)。

任何积极的东西或0都会低于门槛,任何负面的东西都不会。