0

这是我的表:

PeriodID  RecordID  Basis   Amount1 Amount2
1        1          IFRS    10  100
1        2          IFRS    20  200
2        1          IFRS    15  150
2        2          IFRS    25  250
1        1          CGAAP   30  300
1        2          CGAAP   40  400
2        1          CGAAP   35  350
2        2          CGAAP   45  450

我想以 PeriodID 和 Basis 字段为中心,以便结果具有以下列:

RecordID 
Period1IFRSAmount1  
Period2IFRSAmount1  
PeriodID1IFRSAmount2    
PeriodID2IFRSAmount2    
Period1CGAAPAmount1 
Period2CGAAPAmount1 
PeriodID1CGAAPAmount2   
PeriodID2IFRSAmount22
4

1 回答 1

0

首先,您需要将所需的输出创建为行。这就是为什么联合部分非常重要。构建数据后,您可以轻松使用 PIVOT。

以下查询是用 SQL SERVER 编写的。它也应该与其他数据库类似。

SELECT *
FROM
(
    SELECT RecordID, 'Period' + CONVERT(VARCHAR, PeriodID) + Basis + 'Amount1' AS Basis, Amount1 AS Amount
    FROM TableName

    UNION ALL

    SELECT RecordID, 'Period' + CONVERT(VARCHAR, PeriodID) + Basis + 'Amount2' AS Basis, Amount2 AS AMOUNT
    FROM TableName
) AS Q
PIVOT (
    SUM(Amount)
    FOR Basis IN
    (
        [Period1IFRSAmount1],
        [Period2IFRSAmount1],
        [Period1IFRSAmount2],
        [Period2IFRSAmount2],
        [Period1CGAAPAmount1],
        [Period2CGAAPAmount1],
        [Period1CGAAPAmount2],
        [Period2CGAAPAmount2]
    )
) AS P
于 2019-10-09T15:30:19.423 回答