您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我想要表格格式的选择查询结果,例如摘要报告

我想要表格格式的选择查询结果,例如摘要报告

sql Server 2008中,您可以使用PIVOT查询轻松地完成此任务。以下示例依赖于将数据转换为以下格式(看起来已经完成了):

Name        Month    Value
----------  -------  -----
District 1  Month 1     10
District 1  Month 2      5
District 1  Month 3      6
District 2  Month 1      1
District 2  Month 2      2
District 2  Month 3      3
District 3  Month 1      8
District 3  Month 2      6
District 3  Month 3     11

如果可以这样做,那么您的PIVOT查询应如下所示:

DECLARE @myTable AS TABLE([Name] VARCHAR(20), [Month] VARCHAR(20), [Value] INT)
INSERT INTO @myTable VALUES ('District 1', 'Month 1', 10)
INSERT INTO @myTable VALUES ('District 1', 'Month 2', 5)
INSERT INTO @myTable VALUES ('District 1', 'Month 3', 6)
INSERT INTO @myTable VALUES ('District 2', 'Month 1', 1)
INSERT INTO @myTable VALUES ('District 2', 'Month 2', 2)
INSERT INTO @myTable VALUES ('District 2', 'Month 3', 3)
INSERT INTO @myTable VALUES ('District 3', 'Month 1', 8)
INSERT INTO @myTable VALUES ('District 3', 'Month 2', 6)
INSERT INTO @myTable VALUES ('District 3', 'Month 3', 11)

SELECT [Name], [Month 1], [Month 2], [Month 3], [NameTotalValue] AS [Total]
FROM
(
      SELECT [Name], [Month], [Value], 
             SUM([Value]) OVER (PARTITION BY [Name]) as [NameTotalValue] 
      FROM @myTable
    UNION 
      SELECT 'Total', [Month], SUM([Value]), (SELECT SUM([Value]) FROM @myTable)
      FROM @myTable
      GROUP BY [Month]
) t
PIVOT
(
    SUM([Value]) FOR [Month] IN ([Month 1], [Month 2], [Month 3]) 
) AS pvt
ORDER BY pvt.[Name]

在此示例中,我使用SUM([Value]) OVER PARTITION获取每个区的总和,然后执行UNION在底部添加总计行。结果看起来像这样:

Name        Month 1 Month 2 Month 3 Total
----------- ------- ------- ------- -----
District 1       10       5       6    21
District 2        1       2       3     6
District 3        8       6      11    25
Total            19      13      20    52

您会注意到这种方法的一件事是,您必须提前知道想要在表顶部的列名称。如果要将报告设置为全年运行,这很容易做到,但是如果要更改的列数则比较麻烦。如果要允许用户指定自定义日期范围(即07/ 2011-10 / 2011或06 / 2011-11 / 2011),则处理此要求的一种方法是使用动态sql构建PIVOT查询然后使用sp_executesql执行它。

其他 2022/1/1 18:39:17 有613人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶