Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-如果值存在,则按列排序,否则按第二列排序_Sql_Postgresql_Sql Order By_Multiple Columns - Fatal编程技术网

SQL-如果值存在,则按列排序,否则按第二列排序

SQL-如果值存在,则按列排序,否则按第二列排序,sql,postgresql,sql-order-by,multiple-columns,Sql,Postgresql,Sql Order By,Multiple Columns,如何按列名称排序SQL结果,如果没有设置名称,则按电子邮件排序 +----+-------+-----------------+ | ID | name | email | +----+-------+-----------------+ | 1 | John | john@gmail.com | | 2 | --- | linda@gmail.com | | 3 | --- | kikli@gmail.com | | 4 | Peter | peter

如何按列
名称
排序SQL结果,如果没有设置名称,则按
电子邮件
排序

+----+-------+-----------------+
| ID | name  |      email      |
+----+-------+-----------------+
|  1 | John  | john@gmail.com  |
|  2 | ---   | linda@gmail.com |
|  3 | ---   | kikli@gmail.com |
|  4 | Peter | peter@gmail.com |
+----+-------+-----------------+
结果应该如下所示:

John, kikli@gmail.com, linda@gmail.com, Peter
答复:

$users = $this->em->createQueryBuilder()
        ->select('a.id, coalesce(concat(a.firstName, concat(\' \', a.lastName)), a.email) as orderColumn')
        ->from('Company\User\Admin', 'a')
        ->orderBy('orderColumn','ASC')
        ->getQuery()
        ->getScalarResult();
“未设置名称”是什么意思?它是
NULL
还是
'-'
?但是,您可以使用
案例

SELECT 
    CASE WHEN Name IS NULL THEN Email ELSE Name END AS User
FROM 
    dbo.TableName
ORDER BY
    CASE WHEN Name IS NULL THEN Email ELSE Name END ASC, Email ASC
试试这个

SELECT MyName = CASE 
        WHEN NAME = '---'
            THEN Email
        ELSE NAME
        END
FROM YourTable
ORDER BY CASE 
        WHEN NAME = '---'
            THEN Email
        ELSE NAME
        END ASC
简单快捷:

select name as output from tablename where name is not null
union
select email as output from tablename where name is null
order by output asc
orderby
子句中的
1
表示选择列表中的第一列

当使用合并函数时,
大小写
表达式不可索引

create index t_index on t (coalesce(lastName || ' ' || firstName, email));

有没有办法把两条线连在一起?最后,我有firstName和lastName列,我需要检查这两个列。但是当我使用concat()时,没有分隔符。当我使用两个concats()时,分隔符(“”)不为空。
create index t_index on t (coalesce(lastName || ' ' || firstName, email));