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));