Выберите одно значение столбца для других столбцов на основе условия - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть таблица, подобная приведенной ниже структуре, мне нужно написать запрос для извлечения результата, такого как достигнутый месяц, comnet retaine для всех оставшихся месяцев из таблицы на основе условия, если фактическое значение больше или равно целевому значению, затем выберите этот конкретный месяц comments значение для оставшихся месяцев. Моя структура таблицы

Table

Я ожидаю результата, подобного структуре ниже.

Result

Здесь в июне фактическое значение равно 100 и комментарий «Закрыто» после того, как пользователь ничего не введет (факт или комментарии), поскольку фактическое соответствует цели. поэтому мне нужно отобразить комментарий «Закрыто» во все оставшиеся месяцы (июль-декабрь)

Ответы [ 6 ]

0 голосов
/ 09 сентября 2018

Кажется, вы хотите заменить нулевой комментарий последним ненулевым комментарием. Для этого используйте LAST_VALUE:

select
  month,
  last_value(comment ignore nulls) over (order by month) as comment,
  target,
  actual
from mytable
order by month;
0 голосов
/ 09 сентября 2018

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

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE table_name ( month, "COMMENT", target, actual ) AS
  SELECT  1, 'initiated',          NULL,    5 FROM DUAL UNION ALL
  SELECT  2, 'feb',                NULL,    6 FROM DUAL UNION ALL
  SELECT  3, 'Mar- On going',      NULL,   10 FROM DUAL UNION ALL
  SELECT  4, 'Apr- work On going', NULL,   20 FROM DUAL UNION ALL
  SELECT  5, 'May- Ongoing',       NULL,   50 FROM DUAL UNION ALL
  SELECT  6, 'closed',             NULL,  100 FROM DUAL UNION ALL
  SELECT  7, NULL,                 NULL, NULL FROM DUAL UNION ALL
  SELECT  8, NULL,                 NULL, NULL FROM DUAL UNION ALL
  SELECT  9, NULL,                  100, NULL FROM DUAL UNION ALL
  SELECT 10, NULL,                 NULL, NULL FROM DUAL UNION ALL
  SELECT 11, NULL,                 NULL, NULL FROM DUAL UNION ALL
  SELECT 12, NULL,                 NULL, NULL FROM DUAL;

Запрос 1 :

SELECT month,
       "COMMENT",
       max_target As target,
       actual
FROM   (
  SELECT t.*,
         MAX( target ) OVER () AS max_target
  FROM   table_name t
)
WHERE actual >= max_target

Результаты :

| MONTH | COMMENT | TARGET | ACTUAL |
|-------|---------|--------|--------|
|     6 |  closed |    100 |    100 |
0 голосов
/ 09 сентября 2018

Из объяснения, кажется, вам ничего не нужно, кроме этого:

Select month, nvl(comment,'Closed') as comment, target, actual
  From tableDemands;
0 голосов
/ 09 сентября 2018

Ваш ожидаемый результат не очень ясен.Но если я правильно понял, вы можете достичь желаемого результата, используя приведенный ниже запрос (может быть не самый лучший):

with commentValue as (
select month_id, comments from your_table where actual_value = ( select max(target) 
from your_table) 
)
select yt.target,yt.month_id,
case when yt.month_id >= cv.month_id then cv.comments else yt.comments end as 
comments,
yt.actual_value
from your_table yt
join commentValue cv on 1 = 1
0 голосов
/ 09 сентября 2018

вы можете использовать где на основе вашего условия фильтра

    select a.comment 
    from your_table_with_commen a 
    where a.comment is not null
    and a.target is not null 
    and a.target <= a.actual
0 голосов
/ 09 сентября 2018

Ваш ожидаемый результат не ясен, пожалуйста, добавьте ясности. Как насчет этого? -

SELECT *
  FROM YOUR_TABLE
 WHERE MONTHS_ID IN (SELECT MONTHS_ID FROM YOUR_TABLE WHERE ACTUAL_VALUE >= TARGET)

Хотите объединить комментарии по Months_ID?

SELECT MONTHS_ID,
       LISTAGG(COMMENTS, ',') WITHIN GROUP(ORDER BY COMMENTS) AS COMMENTS
  FROM YOUR_TABLE
 WHERE MONTHS_ID IN (SELECT MONTHS_ID  FROM YOUR_TABLE WHERE ACTUAL_VALUE >= TARGET)
 GROUP BY MONTHS_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...