Неправильные значения отображаются в столбцах на мой взгляд.Что я делаю неправильно? - PullRequest
0 голосов
/ 28 ноября 2018

Итак, у меня есть процесс, в котором я вменяю / заменяю данные при загрузке из CSV / XML.Всякий раз, когда значение «вменяется» / «подставляется», я отмечаю исходное (недействительное) значение кодом 'IMP' в столбце DATA_CODE .Затем я вставляю «вмененное» (или «замещенное») значение с кодом «ORG» в столбец DATA_CODE .Ниже приведены некоторые примеры данных:

  VALUE        HOUR                 HOUR_NUM        CONT       TYPE     DATA_CODE
    777     09-SEP-18 02:00:00 PM       1             SMP        SUM     ORG
    -48     09-SEP-18 02:00:00 PM       1             SMP        SUM     IMP
     99     09-SEP-18 03:00:00 PM       2             SMP        SUM     ORG 
      0     09-SEP-18 04:00:00 PM       3             SMP        SUM     ORG
  94181     09-SEP-18 05:00:00 PM       4             SMP        SUM     IMP
    842     09-SEP-18 05:00:00 PM       4             SMP        SUM     ORG
   null     09-SEP-18 06:00:00 PM       5             SMP        SUM     IMP
    842     09-SEP-18 06:00:00 PM       5             SMP        SUM     ORG

Мне нужно представление, похожее на приведенное ниже:

HOUR                    HOUR_NUM   CONT      TYPE    IMPUTED_VAL   ORIG_VAL
09-SEP-18 02:00:00 PM   1          SMP       SUM     777           -48
09-SEP-18 03:00:00 PM   2          SMP       SUM     null           99
09-SEP-18 04:00:00 PM   3          SMP       SUM     null           0
09-SEP-18 05:00:00 PM   4          SMP       SUM     842            94181
09-SEP-18 06:00:00 PM   5          SMP       SUM     842            null

Я пробовал следующее:

select HOUR
     , HOUR_NUM
     , CONT
     , TYPE
     , MAX(CASE WHEN (data_code IN ('IMP', 'SUB') AND TYPE <> 'FAKE')
                THEN value
                ELSE null
                 END)    AS               IMPUTED_VALUE
     , MAX(CASE WHEN (data_code NOT IN ('IMP', 'SUB') OR data_code is null OR TYPE = 'FAKE')
                THEN value
                ELSE null
                 END)   AS                ORIG_VAL
  FROM Table1
  GROUP BY HOUR, HOUR_NUM, CONT, TYPE;

Однако я возвращаю результаты, в которых переключены IMPUTED_VAL и ORIG_VAL.Даже когда я переключаю логику для двух столбцов, я все равно получаю следующие результаты:

HOUR                    HOUR_NUM   CONT      TYPE    IMPUTED_VAL   ORIG_VAL
09-SEP-18 02:00:00 PM   1          SMP       SUM     -48            777
09-SEP-18 03:00:00 PM   2          SMP       SUM     null           99
09-SEP-18 04:00:00 PM   3          SMP       SUM     null           0

Не уверен, достаточно ли этой информации, но думал, что не помешает связаться, поскольку я застрялна это уже довольно давно.

Заранее спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

Я не понимаю, что вы спрашиваете, потому что данные в таблице выглядят правильно для того, что вы написали.Сначала Imputed_val будет -48, потому что data_code находится в 'IMP', а 777 будет в Orig_val, потому что его нет в 'IMP' или 'SUB' Это выглядит правильно.Если вам нужно это переключить, это будет просто противоположные операторы case для каждого столбца.

select DISTINCT tb1.HOUR
     , tb1.HOUR_NUM
     , tb1.CONT
     , tb1.TYPE
     , (CASE WHEN (tb1.data_code IN ('IMP', 'SUB') AND tb1.TYPE <> 'FAKE')
                THEN (SELECT tb2.value
                      FROM table1 tb2
                      WHERE tb2.hour = tb1.hour
                      AND tb2.data_code IN ('ORG'))
                ELSE null
                 END)    AS               IMPUTED_VALUE
     , (CASE WHEN (SELECT tb2.data_code
                   FROM table1 tb2 
                   WHERE tb2.hour = tb1.hour
                   AND tb2.data_code IN 'IMP') IS NULL 
                   OR tb1.data_code IN ('IMP') or data_code IS NULL or TYPE = 'FAKE')
                THEN value
                ELSE null
                 END)   AS                ORIG_VAL
  FROM Table1 tb1
  GROUP BY HOUR, HOUR_NUM, CONT, TYPE;

В этом случае я просто переключил операторы IN и NOT IN и получил желаемые результаты.Вы также можете изменить ТИП тоже?

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