按完全外部联接中的两个单独列的日期排序

时间:2011-10-20 13:48:55

标签: sql sql-server full-outer-join

我使用完全外部联接排列了两列数据,但它包含两个单独的日期列,这使得排序很难。

表1列出了产品的销售排名数据。 表2列出了同一产品的实际销售数据。

每个表可能包含另一个表没有的日期条目。

在完全加入之后,我们想到了这样的简化示例:

ProdID  L.Date         P.Date       Rank   Units
101     null           2011-10-01   null   740
101     2011-10-02     2011-10-02   23     652
101     2011-10-03     null         32     null

以下是我用来提取此数据的查询:

select L.ListID, L.ASIN, L.date, L.ranking, P.ASIN, P.POSdate, P.units from ListItem L
full outer join POSdata P on 
    L.ASIN = P.ASIN and 
    L.date = P.POSdate and 
    (L.ListID = 1 OR L.ASIN is null)
where (L.ASIN = 'xxxxxxxxxx' and L.ListID = 1) or  
      (P.ASIN = 'xxxxxxxxxx' and L.BookID is null) 
order by POSdate, date

它有点复杂,因为产品可能会出现在多个列表中,所以我也必须考虑到这一点,但它会返回我需要的数据。如果有人有一个建议,我愿意接受改进的建议。

问题是,当两个日期列中的日期列可能至少有一些NULL时,如何正确排序。当两列都有一个NULL时,我现在订购方式将不起作用。

感谢。

1 个答案:

答案 0 :(得分:3)

ORDER BY ISNULL(P.POSdate,L.date)应该做我认为需要的事情吗?