SQL 从多个表和列进行数据透视

SQL Pivot from multiple tables and columns

我在 SQL 服务器 (SSMS) 中使用三个 table 像这样

Table一个

ProcessID Step Approver  
  17       10    Kim  
  18       20    Joe  
  19       10    Beth  
  20       20    Josh  

Table乙

ProcessID DeptCode  
   17       515  
   18       515  
   19       190  
   20       190  

Table C

ProcessID AlternateApprover  
   17        Sarah  
   18        David  
   19        Don  
   20        Don

并希望我的结果格式为:

DeptCode FirstApprover FirstAlternate SecondApprover SecondAlternate  
   515       Kim           Sarah          Joe             David  
   190       Beth          Don            Josh            Don

我已经成功地管理了仅审批者的支点,但我不确定如何加入候补者 (Table C)。

我知道这种规范化有点奇怪 - 它不是我的数据库,我无法控制 table 结构

这是旋转多列的更简单方法。

;WITH cte AS 
(
    SELECT  [DeptCode],
            [Approver],
            '' AS [Alternate],
            ROW_NUMBER() OVER (PARTITION BY DeptCode ORDER BY b.ProcessID) Rn
    FROM    TableB b
            JOIN TableA a ON a.ProcessID = b.ProcessID
    UNION ALL
    SELECT  [DeptCode],
            '',
            AlternateApprover,
            ROW_NUMBER() OVER (PARTITION BY DeptCode ORDER BY b.ProcessID) Rn
    FROM    TableB b
            JOIN TableC a ON a.ProcessID = b.ProcessID
)
SELECT  [DeptCode],
        MAX(CASE WHEN Rn = 1 THEN [Approver] END) AS FirstApprover,
        MAX(CASE WHEN Rn = 1 THEN [Alternate] END) AS FirstAlternate,
        MAX(CASE WHEN Rn = 2 THEN [Approver] END) AS SecondApprover,
        MAX(CASE WHEN Rn = 2 THEN [Alternate] END) AS SecondAlternate
FROM    cte
GROUP BY [DeptCode]

这里假定第一和第二顺序由 ProcessID 确定 ROW_NUMBER() OVER (PARTITION BY DeptCode ORDER BY b.ProcessID) 因为您在 TableA 中有 Step 而不是 TableC 我不确定该字段代表什么。