SQL 要创建总计行的行总和
SQL sum of rows to create Total row
下午好,我在 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。
假设您的样本数据是 table,您可以像这样使用纯 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 分享的链接中还有其他更好的选择
下午好,我在 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。
假设您的样本数据是 table,您可以像这样使用纯 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 分享的链接中还有其他更好的选择