首页 > 解决方案 > 来自两个查询的 SQL 百分比

问题描述

目前我有一个存储过程,可以获取映射的数据量和总计(在两列中),但我正在努力添加带有百分比的第三列。

SET NOCOUNT ON

-- Insert statements for procedure here
SELECT 
    (SELECT SUM(Length) / 1000
     FROM [dbo].[map_cache_main]
     WHERE Gradient IS NOT NULL 
       AND TRID >= 1000 AND TRID < 3300) AS Mapped,
    (SELECT SUM(Length) / 1000
     FROM [dbo].[map_cache_main]
     WHERE TRID >= 1000 AND TRID < 3300) AS Total

电流输出:

21681.8478879079, 31293.9302964378

期望的输出:

21681.8478879079, 31293.9302964378, 69.28%

标签: sql

解决方案


在一个查询中完成所有操作:

SELECT SUM(CASE WHEN Gradient IS NOT NULL THEN Length END) / 1000 as Mapped,
       SUM(Length) / 1000 as Total,
       (SUM(CASE WHEN Gradient IS NOT NULL THEN Length END) * 100.0 
        SUM(Length)
       ) as percentage          
FROM [dbo].[map_cache_main]
WHERE TRID >= 1000 AND TRID < 3300;

我不明白为什么你们都要把这个逻辑包装在一个存储过程中。函数或视图也是合适的。


推荐阅读