首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中执行ORDER时,空字符串前面会出现空值。

在SQL中执行ORDER时,空字符串前面会出现空值。
EN

Stack Overflow用户
提问于 2014-11-25 07:43:01
回答 2查看 117关注 0票数 0

我试图从一个表Local_LsIr_Temp中选择一些数据。我需要这样的数据:

  1. dir_emaildir_tele都在场。
  2. 至少有dir_email存在(dir_tele可以是nullempty)
  3. 至少有dir_tele存在(dir_email可以是nullempty)
代码语言:javascript
复制
SELECT ROW_NUMBER() OVER 
(PARTITION BY inst_iconum ORDER BY 
    CASE WHEN (dir_email = '' OR dir_email IS NULL) THEN 1 ELSE 0 END, dir_email,
    CASE WHEN (dir_tele = ''  OR dir_tele  IS NULL) THEN 1 ELSE 0 END, dir_tele
) rn,
* 
FROM Local_LsIr_Temp

我编写了上面的查询,结果并不如预期的那样。

下面附加的是示例结果,用蓝色标记的行应该在行的上方带有两个空值。

请查找此问题的SQL。SQL Fiddle

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-25 08:01:11

必须首先指定CASE语句。话虽如此,您可以通过重写ORDER子句来达到预期的结果:

代码语言:javascript
复制
ORDER BY CASE 
    WHEN dir_email <> '' AND dir_tele <> '' THEN 1 -- Both dir_email and dir_tele are present
    WHEN dir_email <> ''                    THEN 2 -- At least dir_email is present
    WHEN dir_tele  <> ''                    THEN 3 -- At least dir_tele is present 
    ELSE                                         4
END --, additional columns here
票数 2
EN

Stack Overflow用户

发布于 2014-11-25 07:57:20

您的问题是,订单列的顺序是错误的-如果dir_email是非空白的,则dir_tele基本上会被忽略。

试试这个:

代码语言:javascript
复制
...
order by 
  case when (dir_email = '' or dir_email is null) then 1 else 0 end,
  case when (dir_tele = '' or dir_tele is null) then 1 else 0 end,
  dir_enail,
  dir_tele
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27121155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档