从现有视图 Table 实现此特定输出的 T-SQL 代码是什么?

What are the T-SQL codes to achieve this specific output from an existing View Table?

我是 运行 SQL Server 2016,我有以下简单的 T-SQL 查询,它提供以下输出:

查询:

SELECT * from ExtrasViewTable

输出:

 ID      Property     F&B    SPA    TotalExp        Mth
  1        ABC        100     0       100        2014-09-01
  2        XYZ         50    20        70        2014-10-01

我想将输出更改为以下内容:

 ID     Property        Mth          ExpCat       ExpCatAmt
  1       ABC        2014-09-01       F&B            100
  1       ABC        2014-09-01       SPA              0
  1       ABC        2014-09-01       TotalExp       100
  2       XYZ        2014-10-01       F&B             50
  2       XYZ        2014-10-01       SPA             20
  2       XYZ        2014-10-01       TotalExp        70

我很难找到正确的 T-SQL 代码来实现这一点。我已经尝试了一些基本的 Pivot 操作,但它们都是错误的。

您可以使用 UnPivot,

DECLARE @ExtrasViewTable TABLE (
    ID INT
    ,Property VARCHAR(10)
    ,[F&B] INT
    ,SPA INT
    ,TotalExp INT
    ,Mth DATE
    )

insert into @ExtrasViewTable values 
(1,'ABC',100, 0,100,'2014-09-01')
,(2,'XYZ', 50,20, 70,'2014-10-01')

SELECT ID,Property,Mth,Expcat,Expcatamt
FROM @ExtrasViewTable
unpivot(Expcatamt FOR Expcat IN (
            [F&B]
            ,SPA
            ,TotalExp
            )) unpiv;