2015-02-10 81 views
0

我想基于列自定义订单。如果列值为NULL或''(空字符串),那么我想先显示该行。 SQL Server不喜欢以下内容:通过CASE语句和NULL值处理订单

ORDER BY 
     CASE WHEN ISNULL(SendDate.ValidTo, '') = '' 
     THEN NULL 
     END 

ORDER BY 
     CASE WHEN ISNULL(SendDate.ValidTo, '') = '' 
     THEN ISNULL(SendDate.ValidTo, '') = '' 
     END 

是否可以接受做以下?:

ORDER BY 
     CASE WHEN ISNULL(SendDate.ValidTo, '') = '' 
     THEN SendDate.ValidTo 
     END 
+0

问题与所有这些CASE语句是他们没有else子句。 – 2015-02-10 18:30:55

回答

2

你可以指定一个数字上由不同订购CASE -statement的结果如下所示:

ORDER BY CASE WHEN COALESCE(SendDate.ValidTo,'') = '' THEN 1 ELSE 2 END 
+0

会按顺序先空/空值,然后desc或asc? – NonProgrammer 2015-02-10 18:47:33

+1

默认按升序排列,但是您可以为它添加',SendDate.ValidTo DESC'。 – Aquillo 2015-02-10 18:50:08

0

我意识到,我可能只是做了以下内容:

ORDER BY 
     ISNULL(SendDate.ValidTo, '1900-01-01') 
+0

这会在您的NULLS之前订购空的字符串。如果你想平等对待他们,那么你应该使用阿奎罗的答案。 – 2015-02-10 19:23:03