首页 > 解决方案 > SQL 表底部的 NULL 值 - SQL Server 2000

问题描述

我有一张包含姓名和电子邮件信息的表格。我必须将包含 NULL 电子邮件值的行放在表的底部,但是当我使用 SELECT DISTINCT 子句时无法这样做。这是我当前的语法:

SELECT 
DISTINCT
     user_index,
     name,
     email
FROM table1
ORDER BY (CASE WHEN email IS NULL THEN 1 ELSE 0 END)

但每当我尝试执行此查询时,我都会收到错误消息:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

如果我取出 DISTINCT 子句,则此查询有效,但在这种情况下是必要的。有小费吗?

标签: sqlsql-server

解决方案


改为使用聚合:

SELECT user_index, name, email
FROM table1
GROUP BY user_index, name, email
ORDER BY (CASE WHEN email IS NULL THEN 1 ELSE 0 END);

这在功能上与您的问题相同。distinct但是,SQL 引擎不会对使用列的表达式感到困惑。


推荐阅读