Как получить значения для столбца на основе существующих столбцов - PullRequest
0 голосов
/ 26 марта 2019

Мое требование - извлечь данные в следующем формате: если у меня одинаковое значение для COL1, то самое низкое значение COL2 должно быть заполнено для всех строк, и должно быть заполнено соответствующее значение COL3 (это может быть жестко закодировано, поскольку оно не изменится) и значение COL4, соответствующее наименьшему значению COL2, должно быть заполнено для всех строк. (Это не может быть закодировано)

Существующие данные в таблице

SELECT COL1 , COL2 , COL3 , COL4 FROM TABLE1 

COL1  COL2  COL3  COL4
1234  01    ABC   YYY
1234  02    DEF   ZZZ

Мой ожидаемый результат:

COL1  COL2  COL3  COL4
1234  01    ABC   YYY
1234  01    ABC   YYY

Я попытался выполнить приведенный ниже запрос и получил выходные данные для COL2 и COL3, но для COL4 я не получаю.

SELECT
  COL1,
  MIN(COL2) OVER (PARTITION BY COL1)     AS COL2NEW,
  CASE WHEN COL2NEW = 1 THEN 'ABC'
       WHEN COL2NEW = 2 THEN 'DEF' END   AS COL3NEW,
  COL4
FROM
  TABLE1

Пожалуйста, помогите мне получить соответствующий вывод для COL4.

1 Ответ

1 голос
/ 26 марта 2019

Ваш вопрос довольно двусмысленный, но я думаю, что FIRST_VALUE() - это аналитическая функция, которую вы ищете ...

SELECT
  COL1,
  MIN(COL2) OVER (PARTITION BY COL1)     AS COL2NEW,
  CASE WHEN COL2NEW = 1 THEN 'ABC'
       WHEN COL2NEW = 2 THEN 'DEF' END   AS COL3NEW,
  FIRST_VALUE(COL4) OVER (PARTITION BY COL1
                              ORDER BY COL2
                          ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
                         )
                            AS COL4NEW
FROM
  TABLE1

Она принимает первое значение COL4 после сортировки раздела поCOL2.Это означает, что все строки в разделе получают одинаковое значение в COL4NEW, и это значение из входной строки с наименьшим значением в COL2.

...