如何按行中更大的2列值对数据集进行排序?

时间:2013-03-02 14:43:31

标签: sql delphi ms-access

我有一个由Room_WidthsRoom_lengths组成的房间数据库。我希望能够使用Delphi中的TADOQuery对数据集进行排序,以便具有最长边的房间,无论是宽度还是长度,都将是数据集中的第一个。我需要这个,以便我可以在以后执行bin打包算法。

我希望,有些东西看起来与此相似:

ADORoomQuery.SQL.Add('ORDER BY GREATEST(Room_Width, Room_Length)');

例如,如果我有3个房间(9 x 9米),(10 x 2米)和(5 x 12米):

Room_Widths    Room_Lengths
-------------  -------------
9              9
10             2
5              12

然后它将返回以下数据集:

Room_Widths    Room_Lengths
-------------  -------------
5              12
10             2
9              9

我正在使用MS Access数据库。

3 个答案:

答案 0 :(得分:3)

可能是这样的:

  select 
     room_widths, 
     room_lengths, 
     iif(room_widths>room_lengths, room_widths, room_lengths) as longest
  from 
     yourtable
  where 
     <your select criteria>
  order by 
     3 desc

答案 1 :(得分:1)

您可以先尝试规范化数据。例如:

select
  RoomID
, 'W' as Dimension
, Room_Widths as DimensionValue
from yourtable
union all
select
  RoomID
, 'L' as Dimension
, Room_Lengths as DimensionValue
from yourtable
order by RoomID

假设您将上述查询保存为NormalisedRooms。这应该给你这样的东西:

RoomID  Dimension  DimensionValue
------  ---------  --------------
     1          W               9
     1          L               9
     2          W              10
     2          L               2
   ...        ...             ...

现在你可以做到:

select
  RoomID
, max(DimensionValue) as LongestSide
from NormalisedRooms
group by RoomID
order by 2 desc

这应该给你:

RoomID  LongestSide
------  -----------
     3           12
     2           10
     1            9

答案 2 :(得分:1)

好的,谢谢你的建议。我最终使用@Tlama @GordanLinof @ user582118建议以已经订购的状态返回数据集。

我使用的delphi语法和sql是:

with ADOLayoutQuery do
  begin
    SQL.Clear;
    SQL.Add('SELECT Room_Width,Room_Length,IIF(Room_Width > Room_Length, Room_Width, Room_Length) AS Longest');
    SQL.Add('FROM RoomDetails');
    SQL.Add('WHERE OrderNumber = ' + inttostr(OrderNum));
    SQL.Add('ORDER BY IIF(Room_Width > Room_Length, Room_Width, Room_Length) DESC, (Room_Width + Room_Length) DESC');
    Open;
  end;

你们可能会稍微压缩一下,但这对我有用。再次感谢您的帮助,我期待着提出我的下一个问题