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 | 山姆 | 查克 | 布赖恩 | 是 |
您可以使用 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]
我只想在领导者的情况下将姓名包含在经理栏中 领导列中相应值的列为是,如果 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 | 山姆 | 查克 | 哑光 | 是 |