如何合并两个SELECT语句为带自定义列名的单行结果
解决方案
使用条件聚合可以实现将两个日期的统计结果合并到同一行,同时通过ROUND()函数保留两位小数,具体SQL语句如下:
SELECT bck_servername, ROUND(SUM(CASE WHEN [bck_timestamp] LIKE '%0901' THEN CAST(bck_size AS DECIMAL) ELSE 0 END) / 1024.0 / 1024.0 / 1024.0, 2) AS sizeGB, ROUND(SUM(CASE WHEN [bck_timestamp] LIKE '%0801' THEN CAST(bck_size AS DECIMAL) ELSE 0 END) / 1024.0 / 1024.0 / 1024.0, 2) AS sizeGB_old FROM [dbo].[BackupJobs] WHERE [bck_timestamp] LIKE '%0901' OR [bck_timestamp] LIKE '%0801' GROUP BY bck_servername
关键说明:
- 条件聚合:通过
CASE WHEN在SUM()内部判断日期匹配规则,仅累加对应日期的备份大小,不匹配的记录计为0,从而在同一行输出两个日期的统计值。 - 类型转换:由于
bck_size是varchar类型,必须先用CAST(bck_size AS DECIMAL)转换为数值类型,才能进行求和和除法运算。 - 精度控制:
ROUND(计算表达式, 2)将最终结果保留两位小数,满足需求。 - 过滤优化:WHERE子句仅筛选目标日期的记录,减少不必要的计算。
内容的提问来源于stack exchange,提问作者ddl
相关产品推荐
相关产品推荐

