根据当前值更改值以显示不同的值

时间:2018-04-19 01:19:59

标签: sql

我无法想出一个应该是一个相当简单的问题的解决方案;

如果我做了;

SELECT *  
FROM Database

它显示:

id | username | FName | LName   | ReportsTo | email  
---+----------+-------+---------+-----------+--------------------------------
1  | fgibbins | Frank | Gibbins | rleo      | fgibbins@fictionalcompany.com  
---+----------+-------+---------+-----------+--------------------------------
2  | rleo     | Roger | Leo     | null      | rleo@gictionalcompany.com
---+----------+-------+---------+-----------+--------------------------------

我想要的是ReportsTo中显示为FName LName的任何值。

实现此目的的最佳方法是什么,如何查看ReportsTo中的用户名以全名显示?

自从我使用SQL以来已经有一段时间了,所以我试图做到这一点。

3 个答案:

答案 0 :(得分:0)

如果您正在处理的字段已修复,则可以执行

SELECT 
    id, 
    username, 
    FName, 
    LName, 
    FName + ' ' + LName AS ReportsTo, 
    email  
FROM Database

答案 1 :(得分:0)

如果要组合两个列数据,可以使用CONCAT函数。

自己加入你的桌子。

我想你想做这样的事。

SELECT t1.username,
       t1.Fname,
       t1.LName,
       CONCAT(t1.FName,' ',t1.LName,' reports to ',t2.FName,' ',t2.LName) ReportsTo
FROM [Database] t1
LEFT JOIN [Database] t2 ON t1.ReportsTo = t2.username
WHERE t2.username IS NOT NULL

sqlfiddle:http://sqlfiddle.com/#!18/a0c1e/9

答案 2 :(得分:0)

试试这个(如果您愿意,可以将IFNULL中的''更改为'无人'或其他内容):

SELECT t1.id, t1.username, CONCAT(t1.FName,' ',t1.LName) AS name, IFNULL(CONCAT(t2.FName, ' ', t2.LName), '') AS ReportsTo, t1.email
FROM `database` t1
LEFT JOIN `database` t2 ON t1.ReportsTo = t2.username

输出:

id  username    name            ReportsTo   email
1   fgibbins    Frank Gibbins   Roger Leo   fgibbins@fictionalcompany.com
2   rleo        Roger Leo                   rleo@gictionalcompany.com