首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在处理空值时将第n列移动到SQL表的第一列?

如何在处理空值时将第n列移动到SQL表的第一列?
EN

Stack Overflow用户
提问于 2019-09-21 00:28:47
回答 1查看 19关注 0票数 0

我有一个包含员工和经理的表,我正尝试按层次顺序设置该表。目前我的第一列中有employee,他们的经理,他们经理的经理,等等。我想颠倒这个表,这样最高级别的人(CEO)是第一列,经理在他们下面,依此类推,直到员工。如果该人前面只有3个人,那么最后4列将为空。

Coalesce很接近,但它会多次使用同一个管理器填充空列。例如,如果一名员工只有3名经理在他们之上,那么在填写下一位经理之前,它将把CEO放5次。

代码语言:javascript
复制
SELECT 
Employee,
COALESCE(Manager9,Manager8,Manager7,Manager6,Manager5,Manager4,Manager3,Manager2,Manager1) AS [Manager 1],
COALESCE(Manager8,Manager7,Manager6,Manager5,Manager4,Manager3,Manager2,Manager1) AS [Manager 2],
COALESCE(Manager7,Manager6,Manager5,Manager4,Manager3,Manager2,Manager1) AS [Manager 3],
COALESCE(Manager6,Manager5,Manager4,Manager3,Manager2,Manager1) AS [Manager 4],
COALESCE(Manager5,Manager4,Manager3,Manager2,Manager1) AS [Manager 5],
COALESCE(Manager4,Manager3,Manager2,Manager1) AS [Manager 6],
COALESCE(Manager3,Manager2,Manager1) AS [Manager 7],
COALESCE(Manager2,Manager1) AS [Manager 8],
Manager1 AS [Manager 9]


FROM #Temp

我想先说最高管理者(CEO),然后直接向他们汇报,以此类推,直到员工上任。员工可以在第2列或第9列,并在那之后填写NULL。

EN

回答 1

Stack Overflow用户

发布于 2019-09-21 00:53:28

在没有数据的情况下,这个问题有点难以想象。如果我理解正确的话,您可以使用case表达式:

代码语言:javascript
复制
SELECT Employee,
       COALESCE(Manager9, Manager8, Manager7,Manager6, Manager5, Manager4, Manager3, Manager2, Manager1) AS [Manager 1],
       (CASE WHEN [Manager 2] IS NOT NULL
             THEN COALESCE(Manager8, Manager7,Manager6, Manager5, Manager4, Manager3, Manager2, Manager1)
        END) AS [Manager 2],
       (CASE WHEN [Manager 3] IS NOT NULL
             THEN COALESCE(Manager7,Manager6, Manager5, Manager4, Manager3, Manager2, Manager1)
        END) AS [Manager 3],
       . . .
FROM #Temp t;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58032125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档