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

在处理空值时,如何将SQL表中的第n列移到第一列?,sql,Sql,我有一个员工和经理的表格,我正试图按等级顺序设置。目前我在第一栏有员工,他们的经理,他们经理的经理,等等。我想把这个表倒过来,这样排名最高的人(CEO)是第一列,他们下面的经理,依此类推,直到员工。如果前面只有3个人,那么最后4列将为空 Coalesce很接近,但它会用同一个管理器多次填充空列。例如,如果一名员工上面只有3名经理,那么在填写下一行之前,它会将CEO放5次 SELECT Employee, COALESCE(Manager9,Manager8,Manager7,Manager6,

我有一个员工和经理的表格,我正试图按等级顺序设置。目前我在第一栏有员工,他们的经理,他们经理的经理,等等。我想把这个表倒过来,这样排名最高的人(CEO)是第一列,他们下面的经理,依此类推,直到员工。如果前面只有3个人,那么最后4列将为空

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

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

我想这样说,首先是最高管理者(首席执行官),然后是直接向他们汇报,依此类推,直到员工出现。该员工可能在第2列或第9列,之后将填入空值。

如果没有数据,问题有点难以想象。如果我理解正确,您可以使用
case
表达式:

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;

非常不寻常的层次结构设计。提供样本数据和预期结果。