2

Order by当我使用左外连接并且并非所有行都有列的值时,如何在 SQL 查询中使用?这是在 SQL Server 2005 中

Select * from Order O
left outer join Order_Selection OS on OS.Order_ColorID = O.Order_ColorID    
order by OS.Order_SelectionID asc

并非此处的所有行都具有 的值Order_selectionID。当我使用DESC时,我想要的顺序搞砸了,当我使用时ASC,行排在最后,因为没有的行排在Order_SelectionID第一位。

先感谢您!

4

2 回答 2

3

您可以使用CASE表达式来避免依赖ISNULL(OS.Order_SelectionID, magic_number)

SELECT *
FROM   Order O
       LEFT OUTER JOIN Order_Selection OS
         ON OS.Order_ColorID = O.Order_ColorID
ORDER  BY CASE
            WHEN OS.Order_SelectionID IS NULL THEN 1
            ELSE 0
          END,
          OS.Order_SelectionID 
于 2013-01-25T17:44:45.963 回答
-3

Order_selectionID 的行真的有必要吗?如果不使用子句过滤它们:

and Order_selectionID is not null;

或者,如果您的数据允许,您可以将空值替换为某个虚拟值:在 Oracle 中:

select nvl(Order_selectionID, -1) from...
于 2013-01-25T17:33:41.123 回答