我想要一些让我被困了两天的帮助。我需要从数据库中重新计算数据,并在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";
和
{{1}}
我上面的SQL在column2上面返回NULL值column1
答案 0 :(得分:3)
这应该有效:
$SQL = "SELECT * FROM table ORDER BY COALESCE(NULLIF(Other,''), column2) DESC";
我在这里看到了:SQL Coalesce with empty string
答案 1 :(得分:1)
coalesce()
只有在"空" column1中的值实际上是NULL
。空字符串不会触发coalesce()
操作。
除此之外,您的查询将无效。您不能使用两列进行select *
,并以某种方式神奇地在结果中获得一列。为此,您需要一个UNION查询:
(SELECT column1 AS col FROM yourtable)
UNION ALL
(SELECT column2 AS col FROM yourtable)
ORDER BY col
答案 2 :(得分:1)
老问题,但这个解决方案对我有用:
$SQL = "SELECT * FROM table ORDER BY COALESCE(NULLIF(column1, ''), column2)";
答案 3 :(得分:0)
您应该可以像CASE
这样使用:
SELECT *
FROM table
ORDER BY
CASE WHEN LENGTH(column1) IS >0 THEN column1
ELSE column2 END
ASC
答案 4 :(得分:0)
如果您想要1列,可以尝试NULLIF
和COALESCE
的组合,这应该考虑空值和空值
SELECT COALESCE(NULLIF(column1, ''), column2) AS COL
FROM table
如果您确实想要单个结果行上的所有数字(以逗号分隔),您可以使用GROUP_CONCAT
以及之前的代码:
SELECT GROUP_CONCAT(COALESCE(NULLIF(column1, ''), column2)) AS col
FROM table