gpt4 book ai didi

sql-server - 您可以对数据透视表中的行和/或列进行小计吗?

转载 作者:行者123 更新时间:2023-12-02 18:44:22 26 4
gpt4 key购买 nike

我有一组输出数据透视表的查询。是否可以获得数据透视表的行和/或列小计?

我选择的表格看起来像这样

    Site     FormID   Present
Site 1 Form A Yes
Site 1 Form B Yes
Site 1 Form D Yes

等等...

我的数据透视表查询是这样的

   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;

但我真的希望它能带来这样的结果(当然这对我来说并不完全)

    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

感谢您的帮助!

-唐

最佳答案

;WITH C as
(
SELECT FormID,
[Site 1],
[Site 2],
[Site 3],
(SELECT SUM(S)
FROM (VALUES([Site 1]),
([Site 2]),
([Site 3])) AS T(S)) as Total
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
)
SELECT *
FROM
(
SELECT FormID,
[Site 1],
[Site 2],
[Site 3],
Total
FROM C
UNION ALL
SELECT 'Total',
SUM([Site 1]),
SUM([Site 2]),
SUM([Site 3]),
SUM(Total)
FROM C
) AS T
ORDER BY CASE WHEN FormID = 'Total' THEN 1 END

注意:如果您使用的是 SQL Server 2005,则需要更改此设置:

 (SELECT SUM(S)
FROM (VALUES([Site 1]),
([Site 2]),
([Site 3])) AS T(S)) as Total

 (SELECT SUM(S)
FROM (SELECT [Site 1] UNION ALL
SELECT [Site 2] UNION ALL
SELECT [Site 3]) AS T(S)) as Total

试穿SE Data

关于sql-server - 您可以对数据透视表中的行和/或列进行小计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7925748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com