【问题标题】:SQL sum of rows to create Total rowSQL sum of rows to create Total 行
【发布时间】:2021-07-14 16:09:48
【问题描述】:

下午好,我在 SQL 中有以下输出,并且希望为每个添加的代码添加第三行:

我想添加一个总行如下:

提前谢谢你。如果您需要代码,我可以稍后提供。

DECLARE @FY_Ending INT
SET @FY_Ending = 2020

 SELECT
    CAST(DSS_CORPORATE.DBO.ODS_LOCAL_AUTHORITY_CODES.LA_CODE AS INT) AS CASSR_CODE
INTO
    #MAPPING
FROM
    DSS_CORPORATE.DBO.ODS_LOCAL_AUTHORITY_CODES
WHERE
    ORGANISATION_SUBTYPE_CODE IN ('A','E','H','J')
    AND BUSINESS_END_DATE IS NULL
    AND HIGH_LEVEL_HA_CODE <> 'Q99'
    AND LA_CODE <> '203' and LA_CODE <> '612' and LA_CODE <> '810' and LA_CODE <> '811'
    AND ((@FY_Ending < 2020 and LA_Code not in (738)) or (@FY_Ending >= 2020 and LA_Code not in (810,811)))

SELECT
    CASE    
        WHEN DATA.CASSR_CODE IS NULL THEN #MAPPING.CASSR_CODE
        ELSE DATA.CASSR_CODE
        END AS 'CASSR_CODE',    
        DATA.AgeBand_Key,
        SOCC_SALT.IC.V3_DIM_AGEBAND.AgeBand,
        DATA.COUNT
FROM
    (
    SELECT
        SOCC_SALT.IC.V3_SOCC_SALT_FACT.CASSR_CODE,
        SOCC_SALT.IC.V3_SOCC_SALT_FACT.ItemType,
        SOCC_SALT.IC.V3_SOCC_SALT_FACT.AgeBand_Key,
        SUM(SOCC_SALT.IC.V3_SOCC_SALT_FACT.ItemValue) AS 'COUNT'
    FROM
        SOCC_SALT.IC.V3_SOCC_SALT_FACT
    WHERE
        SOCC_SALT.IC.V3_SOCC_SALT_FACT.FY_Ending = @FY_Ending
        AND SOCC_SALT.IC.V3_SOCC_SALT_FACT.ClientType_Key = 1
        AND SOCC_SALT.IC.V3_SOCC_SALT_FACT.AgeBand_Key IN (2,3)
        AND SOCC_SALT.IC.V3_SOCC_SALT_FACT.SequelToSupportRequest_Key IS NOT NULL
        AND SOCC_SALT.IC.V3_SOCC_SALT_FACT.SequelToSupportRequest_Key <> 7
    GROUP BY
        SOCC_SALT.IC.V3_SOCC_SALT_FACT.CASSR_CODE,
        SOCC_SALT.IC.V3_SOCC_SALT_FACT.ItemType,
        SOCC_SALT.IC.V3_SOCC_SALT_FACT.AgeBand_Key) DATA

LEFT JOIN SOCC_SALT.IC.V3_DIM_AGEBAND ON DATA.AgeBand_Key = SOCC_SALT.IC.V3_DIM_AGEBAND.AgeBand_KEY
FULL OUTER JOIN #MAPPING ON DATA.CASSR_CODE = #MAPPING.CASSR_CODE

Order by 1,4 asc


DROP TABLE #MAPPING

问候, 安德鲁

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。您还可以包含生成这些结果的查询。
  • 在MSSQL中可以使用ROLLUP,在MySQL中可以使用ROLLUP,在PostgreSQL中可以使用ROLLUP
  • 在 Oracle 或 MSSQL 中,您也可以使用 group By Grouping sets

标签: sql database sum case partitioning


【解决方案1】:

假设你的样本数据是一个表,你可以像这样使用纯 sql 得到总数:

select CASSR_CODE, AgeBand_Key, AgeBand, [count] from your_sample_table
union all
select CASSR_CODE, 4 as AgeBand_Key, 'Total' as AgeBand, sum([count])
from your_sample_table
group by CASSR_CODE
order by CASSR_CODE, AgeBand_Key

根据您的 DBMS,@Luuk 共享的链接中还有其他更好的选择

【讨论】:

    【解决方案2】:

    在 MSSQL 中你可以使用ROLLUP

    在 MySQL 中你可以使用ROLLUP

    在 PostgreSQL 中你可以使用ROLLUP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-02
      • 2016-06-21
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-09
      • 2022-12-01
      相关资源
      最近更新 更多