I have a set of queries that outputs a pivot table. Is it possible to obtain row and/or column subtotals for a pivot table ?
My table I am selecting from looks like this
Site FormID Present
Site 1 Form A Yes
Site 1 Form B Yes
Site 1 Form D Yes
etc...
My pivot table query is this
SELECT *
FROM (SELECT Site, COUNT(FormID) AS NumberOfForms,FormID
FROM @CRFCount WHERE Present='Yes'
GROUP BY Site, FormID) d
PIVOT
(SUM(NumberOfForms)
FOR [Site] IN ([Site 1], [Site 2], [Site 3])
) AS p;
But I really want it to result in this (which of course it does not total for me)
FormID Site 1 Site 2 Site 3 Total
Form A 8 8 15 31
Form B 14 4 NULL 18
Form C 14 NULL NULL 14
Form D 15 3 16 34
Form E 12 4 NULL 16
Form F 14 5 5 24
Form G 14 8 6 28
Form H 22 10 15 47
Form I 15 10 16 41
Form J 15 5 16 36
Total 143 57 89 289
Thanks for your assistance !
-Don
Note: If you are using SQL Server 2005 you need to change this:
to
Try on SE Data
Try this (not tested):
SAMPLE TABLE
1. Row and Column Total
You can use
CUBE
to get the row and column total on pivoting. More aboutCUBE
here.2. Row Total only
You can use
ROLLUP
to get the row total.3. Column Total only
Change
GROUP BY [SITE],FORMID
toGROUP BY FORMID,[SITE]
Now, if you want to replace null with zero, you can use the below code before dynamic pivot.
And in the out most query of dynamic pivot, replace
@cols
variable with@NullToZeroCols