需要查询减法和除法?

Posted

技术标签:

【中文标题】需要查询减法和除法?【英文标题】:Need a query for subtraction and division? 【发布时间】:2019-12-05 12:12:12 【问题描述】:

在我的表格中列是这样的

msd_mon、msd_yea、msd_sva ...我要查询

SELECT
         (((        SELECT SUM(msd_sva)
        FROM  msdfc00 
        WHERE    msd_yea  IN
            (
            SELECT DISTINCT msd_yea
            FROM  msdfc00 
            )
)-(     SELECT SUM(msd_sva)
        FROM  msdfc00 
        WHERE    msd_yea  = '2016'
)* 100) / (     SELECT SUM(msd_sva)
        FROM  msdfc00 
        WHERE    msd_yea  = '2016'
)) AS thePerc,
         msd_yea
FROM  msdfc00 
WHERE    msd_fco  = 'KF'
 AND    msd_mon  = '11'
GROUP BY  msd_yea 

也就是说,我想从 2016 年 msd_mon 期间的 msd_sva 总和中减去 2017 年 msd_mon 期间的 msd_sva 总和。我的基准年是 2016 年。我只有 4 年到 2018 年。所以计算将是这样的

2016 年的值为 0,2017 年的值为 ((2017 - 2016)* 100 \2016) 对于 2017 年,它将是 ((2018 - 2016)* 100 \2016) 2017 年将是 ((2019 - 2016)* 100 \2016)

有什么帮助吗?

【问题讨论】:

见:Why should I provide an MCRE for what seems to me to be a very simple SQL query? 【参考方案1】:

使用条件聚合:

select sum(case when msd_yea = 2016 then msc_sva end) as sva_2016,
       sum(case when msd_yea = 2017 then msc_sva end) as sva_2017,
       sum(case when msd_yea = 2018 then msc_sva end) as sva_2018,
       sum(case when msd_yea = 2019 then msc_sva end) as sva_2019       
from msdfc00 
where msd_fco  = 'KF' and msd_mon  = '11';

您可以使用子查询进行最终计算:

select 0 as val_2016,
       (sva_2017 - sva_2016) * 100 / sva_2016 as val_2017,
       . . .
from (select sum(case when msd_yea = 2016 then msc_sva end) as sva_2016,
             sum(case when msd_yea = 2017 then msc_sva end) as sva_2017,
             sum(case when msd_yea = 2018 then msc_sva end) as sva_2018,
             sum(case when msd_yea = 2019 then msc_sva end) as sva_2019       
      from msdfc00 
      where msd_fco  = 'KF' and msd_mon  = '11'
     ) m;

【讨论】:

select 0 as val_2016, (sva_2017 - sva_2016) * 100 / sva_2016 as val_2017, (sva_2018 - sva_2016) * 100 / sva_2016 as val_2018, .. from (select sum(case when msd_yea = 2 msd_sva end) as sva_2016, sum(case when msd_yea = 2017 then msd_sva end) as sva_2017, sum(case when msd_yea = 2018 then msd_sva end) as sva_2018, sum(case when msd_yea = 2019 then msd_sva end) as sva_2019 from msdfc00 where msd_fco = 'KF' 和 msd_mon = '11' ) m;无效列 sva_2017 谢谢@Gordon Linoff .. 我收到一个错误说无效列.. @Gopipuli 。 . .列名取自您的问题,尽管可能存在拼写错误。 感谢 Gordon Linoff 我刚刚将查询拆分为两个表格,它给了我结果。我不是查询专家。感谢您宝贵的时间。如果时间允许,我现在需要更多帮助,上述结果将按行显示它会按列显示吗?那是在年份栏下吗? @Gopipuli 。 . .我不完全明白你在评论中问什么。您能否再问一个问题,提供样本数据和所需结果以确保解释清楚?

以上是关于需要查询减法和除法?的主要内容,如果未能解决你的问题,请参考以下文章

添加,减法,除法和乘以存储在布尔数组中的两个二进制数

使用循环和减法返回商和余数的除法?

MIPS计算器用减法和加法实现除法,避免DIV和REM指令

仅使用位移加法和减法的对数时间整数除法

Oracle 关系除法查询

减法和除法运算的十六进制计算器问题