在其中一列中包含基于特定条件的特定行

问题描述 投票:0回答:2
emp_id emp 级别 manager_id 经理_1 经理_2 经理_3 领队
100 A 1 500 山姆 查克 哑光
200 2 600 山姆 查克
300 C 2 700 山姆 查克 艾米
400 D 3 800 山姆 查克 布赖恩

我有一张表,分别在“emp”和“manager”列中包含员工及其各自的经理。仅当领导列中相应值的领导列为“是”并且领导列对经理具有“否”值时,我才想在经理列中包含名称,则应将其标记为 NULL

这是预期的结果

emp_id emp 级别 manager_id 经理_1 经理_2 经理_3 领队
100 A 1 500 山姆 查克 哑光
200 2 600 山姆 查克
300 C 2 700 山姆 查克
400 D 3 800 山姆 查克 布赖恩
sql sql-server join hierarchy
2个回答
0
投票

您可以使用 CASE WHEN 或 IIF:

SELECT *
      ,CASE WHEN leader = 'yes' THEN manager ELSE NULL END AS manager
FROM [my_table]

SELECT *
      ,IIF(leader = 'yes', manager, NULL) AS manager
FROM [my_table]

0
投票

我只想在领导者的情况下将姓名包含在经理栏中 领导列中相应值的列为是,如果 leader 列对经理有一个“否”值,那么它应该被标记 作为 NULL

这可以通过简单的案例陈述来完成:

SELECT emp_id, emp, level, manager_id,
  CASE WHEN leader = 'yes' THEN manager ELSE NULL END AS manager,
  leader
FROM employees;

这将为您提供预期的输出:

emp_id emp 级别 manager_id 经理 领队
100 A 1 500 山姆
200 2 600
300 C 2 700
400 D 3 800 nate

编辑:

根据您更新的问题:

您可以修改查询如下:

SELECT emp_id, emp, level, manager_id,
  CASE WHEN leader = 'yes' THEN manager_1 ELSE NULL END AS manager_1,
  CASE WHEN leader = 'yes' THEN manager_2 ELSE NULL END AS manager_2,
  CASE WHEN leader = 'yes' THEN manager_3 ELSE NULL END AS manager_3,
  leader
FROM employees;

这将为您提供预期的输出:如此 SQLFIDDLE

emp_id emp 级别 manager_id 经理_1 经理_2 经理_3 领队
100 A 1 500 山姆 查克 哑光
200 2 600
300 C 2 700
400 D 3 800 山姆 查克 哑光
© www.soinside.com 2019 - 2024. All rights reserved.