SQL вычисляет несколько столбцов и сравнивает его результат с категорией - PullRequest
0 голосов
/ 13 мая 2019

Ниже приведена таблица с тремя столбцами в столбце результатов, которую я умножил вес с за последние семь дней , чтобы показать результат , кроме этого есть еще одна категория таблица, в которой я хочу показать только одну из трех категорий, если общее количество грантов совпадает с тем, что я написал некоторый код, который на данный момент может быть кратным и суммировать счет в одном столбце, но я хочу знать, можно изменить этот код для сравнения с категорией а также.

Example

на поле на рисунке, как вы видите, есть три категории с колонкой уровня в названии интерпретации.

я хочу получить, как вы видите всего в левом поле равно 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 

1 Ответ

0 голосов
/ 13 мая 2019

Похоже, у вас есть сводные данные. Если в исходной таблице данные не развернуты, работайте над этой таблицей. Вот решение с вашей текущей структурой:

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

демо

Вы должны отменить значения для каждой группы продуктов, затем объединить их веса и умножить. Добавьте группу по свертке и условной интерпретации, используя case when.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...