要在SQL Server 2005中添加总行吗?

时间:2018-12-21 09:27:13

标签: sql tsql sql-server-2005 group-by rollup

我有一个脚本可以创建报告,但是我需要在底部有一个总行。

在SQL Server 2008中,我想我会使用汇总,但是我不知道如何在SQL Server 2005中做到这一点。

USE FEN
    GO
    SELECT 
        PMC.Store_ID,
        PMC.Name,
        SUM (PMC.[Net Sales] / 1000) AS 'Daily Sales',
        SUM  (PMCLY.[Net Sale LY] / 1000) AS 'Daily Sales LY',
        CAST(100.0*(PMC.[Net Sales] - PMCLY.[Net Sale LY]) / PMCLY.[Net Sale LY] AS Decimal (10,2)) AS 'VAR % Vs LY',
        SUM (PMCW.[Net Sales Week] / 1000) AS 'Daily Sales Week',
        SUM (PMCLYW.[Net Sale Week LY] /1000) AS 'Daily Sales Week LY',
        CAST(100.0*(PMCW.[Net Sales Week] - PMCLYW.[Net Sale Week LY]) / PMCLYW.[Net Sale Week LY] AS Decimal (10,2)) AS 'VAR % Vs LY'

    FROM PMC_DailySalesReport AS pmc
        JOIN PMC_DailySalesReportLY as pmcly on pmcly.Store_ID = pmc.Store_ID
        JOIN PMC_DailySalesReportWeek as PMCW on pmcw.Store_ID = pmc.Store_ID
        JOIN PMC_DailySalesReportLYWeek AS PMCLYW on PMCLYW.Store_ID = PMC.Store_ID
    GROUP BY 
        PMC.Store_ID,
        PMC.Name, 
        PMC.[Net Sales],
        PMCLY.[Net Sale LY],
        PMCLYW.[Net Sale Week LY],
        PMCW.[Net Sales Week]

    go

目的是将“商店ID”和“商店名称”中所有有关列的总计加到表底部

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我希望您可以添加一个UNION ALL来选择一个包含聚合的行,而不进行任何分组,这应该为所有行提供一个数字:

 -- your query above, and then:
UNION ALL
SELECT 
    'All' As Store_ID,
    'All' As Name,
    SUM (PMC.[Net Sales] / 1000) AS 'Daily Sales',
    SUM  (PMCLY.[Net Sale LY] / 1000) AS 'Daily Sales LY',
    CAST(100.0*(PMC.[Net Sales] - PMCLY.[Net Sale LY]) / PMCLY.[Net Sale LY] AS Decimal (10,2)) AS 'VAR % Vs LY',
    SUM (PMCW.[Net Sales Week] / 1000) AS 'Daily Sales Week',
    SUM (PMCLYW.[Net Sale Week LY] /1000) AS 'Daily Sales Week LY',
    CAST(100.0*(PMCW.[Net Sales Week] - PMCLYW.[Net Sale Week LY]) / PMCLYW.[Net Sale Week LY] AS Decimal (10,2)) AS 'VAR % Vs LY'
FROM PMC_DailySalesReport AS pmc
    JOIN PMC_DailySalesReportLY as pmcly on pmcly.Store_ID = pmc.Store_ID
    JOIN PMC_DailySalesReportWeek as PMCW on pmcw.Store_ID = pmc.Store_ID
    JOIN PMC_DailySalesReportLYWeek AS PMCLYW on PMCLYW.Store_ID = PMC.Store_ID

它可能不那么简单,因为在主查询中您有一些额外的分组依据字段,这些字段实际上并没有直接出现在选择中,但这是一般的想法。如果不查看架构,样本数据和预期输出,就很难更精确(因为无法测试查询)。