Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写SQL查询,根据条件对结果进行排序?_Sql_Sql Order By - Fatal编程技术网

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

如何编写SQL查询,根据条件对结果进行排序?,sql,sql-order-by,Sql,Sql Order By,这个问题基于我的观点,使用了所有相同的基本信息。该链接显示了我的表布局和简单联接的基本要点 我想编写另一个查询,从表1中选择每个记录,并简单地按照值是否小于链接阈值对它们进行排序 我再次感谢任何愿意尝试这一点的人。数据库从来都不是我的强项。选择t1.LogEntryID,t1.Value,t1.ThresholdID, SELECT t1.LogEntryID, t1.Value, t1.ThresholdID, case when t1.Value < t2.threshold

这个问题基于我的观点,使用了所有相同的基本信息。该链接显示了我的表布局和简单联接的基本要点

我想编写另一个查询,从表1中选择每个记录,并简单地按照值是否小于链接阈值对它们进行排序

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

选择t1.LogEntryID,t1.Value,t1.ThresholdID,
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
当t1.值

如果您想要相反的顺序,可以将
DESC
添加到
ORDER By Rank
之后。

类似于OrbMan给出的答案,但我更喜欢在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
选择
t1.LogEntryID
,t1.0
,t1.ThresholdID
从…起
表1 t1
在t2.ThresholdID=t1.ThresholdID上连接表2 t2
订购人
t1.值
只是一个想法,但您不能使用“阈值”作为返回列之一吗

如果您这样做了(列是数字的),您还可以看到该值离阈值有多近(或有多远)


任何正值或0都会低于阈值,任何负值都不会。

您需要手动添加所需的其余字段,但无论如何您都应该这样做。我不理解这个注释,查询显示了表1中的所有记录,这就是要求。我提到这些表中的字段比我显示的要多得多。我相信戴夫是指这个。最后:我认为你的假设是正确的,奥伯曼。我们故意没有在表1中添加“排名”列,因为我们计划在查询中动态计算它。但是,如果我们只需要手动循环所有数据来找出它,这对我们有什么好处呢?让它在添加的列中返回是完美的。这样,它只有在我们需要的时候才会出现,而且保证是准确的。OrbMan的解决方案为您提供了一种快速检查每行条件的方法,但是,如果他想要完整的结果集,这可能是他需要的信息。在我看来,这一行更干净。。。除了连接类型之外,我不确定执行计划中的主要区别是什么。我不太在乎表2的结果。我只是想让表1中的每一行按是否通过给定的阈值排序。我假设您想查看输出中的排名,因为如果不显示表2中的记录,您就无法知道哪些行的t1.Value