2016-04-25 5 views
1

Я пытаюсь выполнить конкатенацию столбца на основе порядка счетчика образцов и поля ID. Ниже приведен пример данныхNetezza-Concatenate Различные значения из одной колонки на основе заказа из другой колонки

**Heat ID** **Sample Type** **Sample Counter** 
    466170   T1    2 
    466170   L0    3 
    466170   C1    4 
    466170   V2    1 
    580910   C1    1 
    580910   L0    2 
    580910   T1    3 

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

**Heat ID** **Concat Code** 
    466170  V2_T1_L0_C1 
    580910  C1_L0_T1 

Данные структурированы так, что не каждый идентификатор тепла будет иметь одинаковое количество типов образцов, а типы образцов - в другом порядке. Счетчик образцов - это когда используется другой тип образца (Заказ). Любая помощь будет принята с благодарностью. Спасибо!

+0

Пожалуйста, отметьте свой вопрос в базе данных, которую вы используете. –

+0

Что [тег: rdbms] вы используете? – Mureinik

ответ

0

Существует несколько способов приблизиться к этому. Агрегация строк обычно скорее специфична для конкретной базы данных. Однако столбец счетчика позволяет вместо этого использовать условную агрегацию:

select heatid, 
     (max(case when samplecounter = 1 then sample_type else '' end) || 
     max(case when samplecounter = 2 then '_' || sample_type else '' end) || 
     max(case when samplecounter = 3 then '_' || sample_type else '' end) || 
     max(case when samplecounter = 4 then '_' || sample_type else '' end) || 
     max(case when samplecounter = 5 then '_' || sample_type else '' end) 
     ) as concat_code 

from t 
group by heatid; 

Обратите внимание, что для максимального счетчика образцов вам достаточно условных операторов.

Кроме того, некоторые базы данных задают || как + или даже требуют явного использования функции concat().

+0

Это сработало отлично, спасибо тебе, Гордон! – Drew