4

我想要一些让我难过两天的帮助。我需要从数据库中检索数据并column1在它不为空时对其进行排序,然后通过column2

column1      column2
1            11
2            12
3            13
             14
             15
             16

所需结果

1,2,3,14,15,16

我尝试了很多方法,我最近失败的尝试是

$SQL = "SELECT * FROM table ORDER BY COALESCE(column1,column2) DESC";

`$SQL = "SELECT * FROM table ORDER BY COALESCE(column1,column2) ASC";

我上面的 SQL 在 column2 上方返回 NULL 值 column1

4

5 回答 5

3

这应该有效:

$SQL = "SELECT * FROM table ORDER BY COALESCE(NULLIF(Other,''), column2) DESC";

我在这里看到了:SQL Coalesce with empty string

于 2017-06-26T12:51:18.443 回答
1

coalesce()仅当 column1 中的“空”值实际上是NULL. 空字符串不会触发coalesce()操作。

除此之外,您的查询将不起作用。您不能对select *两列进行 a 并以某种方式神奇地在结果中获得一列。为此,您需要一个 UNION 查询:

(SELECT column1 AS col FROM yourtable)

UNION ALL

(SELECT column2 AS col FROM yourtable)
ORDER BY col
于 2013-07-19T14:49:36.053 回答
1

老问题,但这个解决方案对我有用:

$SQL = "SELECT * FROM table ORDER BY COALESCE(NULLIF(column1, ''), column2)";

于 2017-11-17T11:13:13.370 回答
0

您应该可以CASE像这样使用:

SELECT *
FROM table
ORDER BY 
CASE WHEN LENGTH(column1) IS >0 THEN column1 
ELSE column2 END 
ASC

http://dev.mysql.com/doc/refman/5.0/en/case.html

于 2013-07-19T14:49:40.617 回答
0

如果你想要 1 列,你可以尝试使用 and 的组合NULLIFCOALESCE这应该同时考虑空值和空值

SELECT COALESCE(NULLIF(column1, ''), column2) AS COL
FROM table

SQLFiddle Demo

如果你真的想要一个结果行上的所有数字,用逗号分隔,你可以GROUP_CONCAT与前面的代码一起使用:

SELECT GROUP_CONCAT(COALESCE(NULLIF(column1, ''), column2)) AS col
FROM table

SQLFiddle Demo2

于 2013-07-19T15:01:53.387 回答