0

我正在尝试按字母名称排序列表,除非该行有一个组,否则我希望使用该组。grouped也可以是 NULL 或空字符串。

例如:

name      grouped
a         NULL
b         
c         a 
d         

将被订购为:

a,c,b,d

这就是我所拥有的

SELECT name FROM table ORDER BY COALESCE(grouped, name)

我也试过:

SELECT name FROM table ORDER BY CASE WHEN LENGTH(grouped) = 0 
THEN name ELSE grouped END

但是这些解决方案都不能正常工作,它们最终会首先显示所有分组的项目,而不是像我期望的那样与名称混合。

4

2 回答 2

1

由于您混合了空字符串和空字符串,请执行以下操作:

SELECT name 
FROM table 
ORDER BY COALESCE(grouped, '') || name;

这会将空值更改为空字符串,将空字符串保留为空字符串,并连接名称。

于 2013-09-21T20:10:36.817 回答
1
SELECT *
FROM MyTable
ORDER BY CASE COALESCE(grouped, '')
         WHEN '' THEN name
                 ELSE grouped
         END,
         COALESCE(grouped, '') <> ''
于 2013-09-21T22:06:46.780 回答