Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL计算多列并将其结果与类别进行比较_Sql_Oracle - Fatal编程技术网

SQL计算多列并将其结果与类别进行比较

SQL计算多列并将其结果与类别进行比较,sql,oracle,Sql,Oracle,下表为结果列i中的三列乘以过去七天的重量以显示结果,在这张表旁边还有一个类别,我想只显示三个类别中的一个,如果赠款总额和我写的代码相匹配,现在可以在一列中乘以分数并求和,但我想知道是否可以更改此代码以与类别进行比较 如图所示,在图中的框中有三个类别,级别列位于解释名称中 我想要的是,正如您所看到的,左框中的总数是56.5,现在它与右框中的>42.5值匹配,我希望我的sql代码给出下面的结果 Score Category Interpretation 56.5

下表为结果列i中的三列乘以过去七天的重量以显示结果,在这张表旁边还有一个类别,我想只显示三个类别中的一个,如果赠款总额和我写的代码相匹配,现在可以在一列中乘以分数并求和,但我想知道是否可以更改此代码以与类别进行比较

如图所示,在图中的框中有三个类别,级别列位于解释名称中

我想要的是,正如您所看到的,左框中的总数是56.5,现在它与右框中的>42.5值匹配,我希望我的sql代码给出下面的结果

Score      Category        Interpretation
56.5       >42.5             High
我确实尝试了下面的代码,我需要对其进行一些修改,我想,目前我在图片的右框中没有针对这三个类别的另一个特定表格,如果不为类别创建表格就可以实现上述结果,如果创建另一个表格并加入,请告诉我方法

select (SUM (FCS_CEREALS_AND_TUBERS * 2) + SUM (FCS_PULSES * 3) +
        SUM (FCS_VEGETABLES * 1) + SUM (FCS_FRUIT * 1)  +
        SUM (FCS_MEAT_AND_FISH * 4) + SUM (FCS_MILK * 4) +
        SUM (FCS_SUGAR * 0.5) + SUM (FCS_OIL * 0.5)) AS RESULT
from TBL_FCS 

看起来您有数据透视。如果原始表中的数据未插入,则处理此表。以下是您当前结构的解决方案:

with 
  weights(id, food_group, weight) as (
    select 1, 'CEREALS AND TUBERS', 2 from dual union all
    select 2, 'PULSES',             3 from dual union all
    select 3, 'VEGETABLES',         1 from dual union all
    select 4, 'FRUIT',              1 from dual union all
    select 5, 'MEAT AND FISH',      4 from dual union all
    select 6, 'MILK',               4 from dual union all
    select 7, 'SUGAR',             .5 from dual union all 
    select 8, 'OIL',               .5 from dual ) 
select food_group, past_7_days, weight, result, 
       case when id is null and result <= 28 then 'Low'
            when id is null and result between 28.5 and 42 then 'Normal'
            when id is null and result >= 42.5 then 'High'
       end as interpretation
  from (
    select food_group, past_7_days, weight, sum(past_7_days * weight) result, id
      from (
        select *
          from tbl_fcs
          unpivot (past_7_days for food_group in (
            fcs_cereals_and_tubers as 'CEREALS AND TUBERS', 
            fcs_pulses             as 'PULSES', 
            fcs_vegetables         as 'VEGETABLES', 
            fcs_fruit              as 'FRUIT', 
            fcs_meat_and_fish      as 'MEAT AND FISH', 
            fcs_milk               as 'MILK', 
            fcs_sugar              as 'SUGAR', 
            fcs_oil                as 'OIL')))
      join weights using (food_group)
      group by rollup((food_group, past_7_days, weight, id)))
   order by id

您必须取消每个食物组的Pivot值,然后将其与重量相加并相乘。使用case-when添加group by rollup和条件解释。

标记数据库名称。Oracle apex SQL命令