2016-04-06 2 views
0

Мне нужно выполнить запрос, где сценарий выглядит примерно так:Запрос для сценария

Col_1 Col_2 Col_3 Col_4 Col_5 
A  AB AC  AD  AE 
B  BC BD  BE  ? 
C  CD CE  ?  ? 
D  DE  ?  ?  ? 
E  ?  ?  ?  ? 

Любая помощь по нижеследующе высоко ценится.

Спасибо, Amit

+0

Попытка осуществить это с помощью строки 1 и следующие 1 следующее. – user3901666

+0

Можете ли вы показать фактические данные? Какой у вас релиз Teradata? – dnoeth

+0

Hi Dieter, На данный момент у меня нет фактических данных. Моя версия teradata - 14.01.0.04. – user3901666

ответ

1

нужны разные rows для каждого столбца:

select 
    col_1 
    ,col_1 || min(col_1) over (order by ... rows between 1 following and 1 following) 
    ,col_1 || min(col_1) over (order by ... rows between 2 following and 2 following) 
    ,col_1 || min(col_1) over (order by ... rows between 3 following and 3 following) 
    ,col_1 || min(col_1) over (order by ... rows between 4 following and 4 following) 
+0

Thanks Dieter, Это прекрасно работает. У меня есть одно сомнение и всегда было. Как работает min (col1) .. здесь. max (col1) over .. также дает требуемый результат. Какая разница. – user3901666

+1

@ user3901666: Это способ имитации 'LEAD (col_1, n)' Standatd SQL в Teradata. Поскольку размер окна составляет ровно одну строку, 'MIN' и' MAX' возвращают одно и то же значение. – dnoeth

1

{

SELECT CHR(64+LEVEL) AS A, 
DECODE(SIGN(4 - LEVEL) , -1, '?',CHR(64+LEVEL)||CHR(65 +LEVEL)) B, 
DECODE(SIGN(3 - LEVEL) , -1, '?',CHR(64+LEVEL)||CHR(66 +LEVEL)) C, 
DECODE(SIGN(2 - LEVEL) , -1, '?',CHR(64+LEVEL)||CHR(67 +LEVEL)) D, 
DECODE(sign(1 - level) , -1, '?',chr(64+level)||chr(68 +level)) E 
from dual connect by level <6; 

} это выше с помощью Oracle 10g, другой БД должна иметь некоторую другую стратегию.

+0

Большое спасибо Dieter, Его работа отлично. @ nirjhar - не знаю точно, как реализовать это в teradata. Спасибо за вашу помощь. – user3901666

Смежные вопросы