Задание значения счетчика c для столбца идентификатора на основе значения входного блока в тераданных - PullRequest
0 голосов
/ 16 января 2020

У меня есть таблица с распределением данных ниже:

cola colb 
id1     a
id1     b
id2     c
id2     d
id3     e
id3     f
id4     g
id4     h

Я пытаюсь создать дополнительное поле идентификатора на основе значения чанка, которое я буду передавать в качестве ввода: например, для 2 в этом случае , Итак, мой конечный результат будет выглядеть примерно так:

cola colb col_new_id
id1     a        1
id1     b        1
id2     c        1
id2     d        1
id3     e        2
id3     f        2
id4     g        2
id4     h        2

Есть ли способ справиться с этим с помощью оконных / аналитических функций в терадате. Мы всегда можем l oop и генерировать значение col3 на основе значений col1, но я ищу решение на уровне запросов без циклов. Будет ли это возможно.

1 Ответ

1 голос
/ 16 января 2020

Вы можете использовать DENSE_RANK() над значениями cola, чтобы сгенерировать число, представляющее порядок этого значения в списке, затем добавить chunk - 1 и целочисленное деление на chunk, чтобы создать значение col_new_id. Например:

DECLARE @chunk INT;
SET @chunk = 2;
SELECT cola, colb, 
       (DENSE_RANK() OVER (ORDER BY cola) + @chunk - 1) / @chunk AS col_new_id
FROM data

Вывод:

cola    colb    col_new_id
id1     a       1
id1     b       1
id2     c       1
id2     d       1
id3     e       2
id3     f       2
id4     g       2
id4     h       2

Демонстрация на dbfiddle

...