【问题标题】:how to add values from select statement as a new column如何将 select 语句中的值添加为新列
【发布时间】:2020-10-21 07:22:30
【问题描述】:

我的桌子是

ID  FirstName   LastName    ReportsTo       Position    Age
8   Ashley      Johnson     null            Intern      25  
5   Noah        Fritz       Jenny Richards  Assistant   30  
6   David       S           Jenny Richards  Director    32  
3   Jenny       Richards    null            CEO         45  

我想在上面的表格中添加一列作为“老板标题”,其中的值来自下面的 select 语句。但它不起作用。

SELECT *,
    case when ReportsTo='Jenny Richards' then 'CEO'
    else 'None' end 
    as 'Boss Title'
    FROM maintable_L8MOQ where ReportsTo='Jenny Richards' or ReportsTo is null order by age;

【问题讨论】:

  • 请标记您的 sql 引擎。

标签: sql join select case


【解决方案1】:
select FirstName,LastName,ReportsTO,Position,Age
      ,(case when ReportsTO='Jenny Richards' then 'CEO' 
             when ReportsTO is null then 'None' 
        else 'None' 
        end) as "Boss Title"
from maintable_H9LYD
where   ReportsTO = 'Jenny Richards' 
     or ReportsTO is null
order by age ASC

【讨论】:

  • 始终格式化代码(我这次做了,您可以批准)并解释您的代码,让 OP 了解您的代码与其他代码有何不同
【解决方案2】:

您可以自行加入表或使用关联子查询来带入每个员工的老板的头衔。

但是,请注意您的架构没有为此进行适当的优化。您应该引用每个员工老板的id 而不是其姓名:这样会更有效(它避免了字符串连接的需要)和更准确(没有同音异义的风险)。

对于您当前的架构,这将是:

select l.*, coalesce(b.title, 'None') boss_title
from maintable_L8MOQ l
left join maintable_L8MOQ b 
    on concat(b.firstName, ' ', b.lastName) = l.reportsTo
order by l.age

【讨论】:

  • 这里我只想检查是否有人向 jenny richards 报告,然后我想将值作为 CEO 添加到新列,如果 reportsto 值为空,那么我希望 'None' 作为值我的新专栏
【解决方案3】:

在新列名周围使用双引号 "。这是工作的demo

SELECT *,
    case when ReportsTo='Jenny Richards' then 'CEO'
    else 'None' end 
    as "Boss Title"
FROM maintable_L8MOQ 
where ReportsTo='Jenny Richards' or ReportsTo is null 
order by age;

【讨论】:

  • 我想将新值作为列添加到我现有的表中,而不是添加到我的结果中
  • @anonymous_coder 如果可能,创建一个新表,然后使用insert 语句运行以下查询。
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2021-01-19
相关资源
最近更新 更多