t-sql pivot - 月收入

Her*_*der 2 t-sql sql-server pivot

我无法弄清楚如何构建PIVOT我的收入查询.

首先,这是我的查询:

SELECT  DATENAME(month,
             CONVERT(DATETIME, CONVERT(VARCHAR, TransactionMonth) + '/1'
             + '/2013')) AS MONTH ,
    RevenueGroup ,
    AMOUNT
FROM    ( SELECT    f.TransactionMonth ,
                f.RevenueGroupID ,
                '$'
                + CONVERT(VARCHAR, CAST(SUM(f.LineItemAmount) AS MONEY), -1) AS Revenue ,
                MIN(f.RevenueGroup) AS RevenueGroup
      FROM      Financials(@StartDate, @EndDate, @SiteID) f
      GROUP BY  f.TransactionMonth ,
                f.RevenueGroupID
    ) AS Rev
ORDER BY Rev.TransactionMonth DESC ,
        CAST(Revenue AS MONEY) DESC
Run Code Online (Sandbox Code Playgroud)

这是我的结果集:

MONTH       RevenueGroup         AMOUNT
December    Dues - Collect       $425,725.71
December    NMS                  $78,444.17
December    Personal Training    $58,511.53
November    Dues - Collect       $425,683.75
November    NMS                  $114,710.25
November    Personal Training    $66,277.49
October     Dues - Collect       $419,250.09
October     NMS                  $96,098.86
October     Personal Training    $58,725.77
Run Code Online (Sandbox Code Playgroud)

以下是结果集如何需要关注sql PIVOT:

RevenueGroup        DECEMBER      NOVEMBER      OCTOBER
Dues - Collect      $425,725.71   $425,683.75   $419,250.09
NMS                 $78,444.17    $114,710.25   $96,098.86
Personal Training   $58,511.53    $66,277.49    $58,725.77
Run Code Online (Sandbox Code Playgroud)

如何使用T-SQL PIVOT实现这一目标?

M.A*_*Ali 7

测试数据

CREATE TABLE #MyTable ([MONTH] NVARCHAR(20),RevenueGroup NVARCHAR(100),AMOUNT NUMERIC(20,2))
GO
INSERT INTO #MyTable
VALUES
('December','Dues - Collect',       425725.71),
('December','NMS',                  78444.17),
('December','Personal Training',    58511.53),
('November','Dues - Collect',       425683.75),
('November','NMS',                  114710.25),
('November','Personal Training',    66277.49),
('October','Dues - Collect',       419250.09),
('October','NMS',                  96098.86),
('October','Personal Training',    58725.77)
Run Code Online (Sandbox Code Playgroud)

询问

SELECT RevenueGroup, [October],[November],[December]
FROM (SELECT * FROM #MyTable)t   --<-- Your Existing Query can go in here but do not
  PIVOT                             -- not do any formating like Dollar sign as you want
      (                             -- sum the results by month later on    
      SUM(AMOUNT)
      FOR [MONTH]
      IN ([October],[November],[December])
      )P
Run Code Online (Sandbox Code Playgroud)

结果

?????????????????????????????????????????????????????????
?   RevenueGroup    ?  October  ? November  ? December  ?
?????????????????????????????????????????????????????????
? Dues - Collect    ? 419250.09 ? 425683.75 ? 425725.71 ?
? NMS               ? 96098.86  ? 114710.25 ? 78444.17  ?
? Personal Training ? 58725.77  ? 66277.49  ? 58511.53  ?
?????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)