2016-11-10 4 views
0

Я использую SQL Server 2012 и имею следующий сводный код, который отлично работает. Однако как включить итоговую сумму строки, т. Е. Сумму зарегистрированной суммы для каждой учетной записи в течение года?SQL Server Pivot Row Total

SELECT * 
FROM (
SELECT [Account],[AccountDesc], CONVERT(CHAR(4), AccDate, 100) as [Month], [RecordedAmount] 
FROM [tblGLS215_2016_2017] 
WHERE [Employee] = @Employee 
) AS s 
PIVOT 
(
SUM ([RecordedAmount]) 
FOR [Month] in (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sept, Oct, Nov, Dec) 
) As pvt 

Любая помощь была бы принята с благодарностью.

+0

Возможный дубликат. http://stackoverflow.com/questions/13418103/horizontal-grand-total-in-pivot-table-sql –

+0

Вышеприведенное замечание похоже, что оно достигнет результата; но вы также можете сделать что-то вроде 'SELECT pvt. * , Isnull (pvt.jan, 0) + Isnull (pvt.feb, 0) + Isnull (pvt.mar, 0) + Isnull (pvt.apr, 0) + IsNull (pvt.may, 0) + IsNull (pvt.jun, 0) + IsNull (pvt.jul, 0) + IsNull (pvt.aug, 0) + IsNull (pvt.sept, 0) + IsNull (pvt.oct, 0) + IsNull (pvt.nov, 0) в YearTotal FROM (' – Aron

+0

@WEI_DBA ссылка дается не похож на мой стержень - он имеет группу-на и я все равно нужно суммировать за каждый месяц, поэтому я отклонил этот ответ. – Michael

ответ

0

Если кому-то интересно это окончательный рабочий раствор:

SELECT pvt.* ,Isnull(pvt.jan,0) +Isnull(pvt.feb,0) +Isnull(pvt.mar,0) +Isnull(pvt.apr,0) +Isnull(pvt.may,0) +Isnull(pvt.jun,0) +Isnull(pvt.jul,0) +Isnull(pvt.aug,0) +Isnull(pvt.sept,0) +Isnull(pvt.oct,0) +Isnull(pvt.nov,0) as YearTotal 
FROM (
SELECT [Account],[AccountDesc], CONVERT(CHAR(4), AccDate, 100) as [Month], [RecordedAmount] 
FROM [tblGLS215_2016_2017] 
WHERE [Employee] = @Employee 
) AS s 
pivot (
SUM ([RecordedAmount]) 
FOR [Month] in (May, Jun, Jul, Aug, Sept, Oct, Nov, Dec, Jan, Feb, Mar, Apr) 
) As pvt 
0

это также будет работать для вас и может работать лучше

SELECT [Account], 
     [AccountDesc], 
     SUM(CASE WHEN [Month] = 'Jan' THEN [RecordedAmount] END) AS [Jan], 
     SUM(CASE WHEN [Month] = 'Feb' THEN [RecordedAmount] END) AS [Feb], 
     SUM(CASE WHEN [Month] = 'Mar' THEN [RecordedAmount] END) AS [Mar], 
     SUM(CASE WHEN [Month] = 'Apr' THEN [RecordedAmount] END) AS [Apr], 
     SUM(CASE WHEN [Month] = 'May' THEN [RecordedAmount] END) AS [May], 
     SUM(CASE WHEN [Month] = 'Jun' THEN [RecordedAmount] END) AS [Jun], 
     SUM(CASE WHEN [Month] = 'Jul' THEN [RecordedAmount] END) AS [Jul], 
     SUM(CASE WHEN [Month] = 'Aug' THEN [RecordedAmount] END) AS [Aug], 
     SUM(CASE WHEN [Month] = 'Sept' THEN [RecordedAmount] END) AS [Sept], 
     SUM(CASE WHEN [Month] = 'Oct' THEN [RecordedAmount] END) AS [Oct], 
     SUM(CASE WHEN [Month] = 'Nov' THEN [RecordedAmount] END) AS [Nov], 
     SUM(CASE WHEN [Month] = 'Dec' THEN [RecordedAmount] END) AS [Dec], 
     SUM([RecordedAmount]) AS [Total] 
FROM (
      SELECT [Account], 
        [AccountDesc], 
        CONVERT(CHAR(4),AccDate,100) AS [Month], 
        [RecordedAmount] 
      FROM [tblGLS215_2016_2017] 
      WHERE [Employee] = @Employee 
     ) t 
GROUP BY [Account], 
     [AccountDesc] 

работает так же, как стержень, но дает немного больше контроля при включении дополнительной информации.