2016-04-06 22 views
0

Senaryoyu aşağıdaki gibi bir sorguyu uygulamak zorundayım;Senaryo için sorgu

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  ?  ?  ?  ? 

Aşağıdakiler hakkında herhangi bir yardım çok takdir edilmektedir.

sayesinde Amit

+0

bu şu izlenmiş ve 1 satır 1 kullanarak uygulamak çalışıyorum. – user3901666

+0

Gerçek verileri gösterebilir misiniz? Teradata'nın sürümü ne? – dnoeth

+0

Merhaba Dieter, Şu an itibariyle, gerçek verilere sahip değilim. Benim teradata versiyonum 14.01.0.04. – user3901666

cevap

1

Her sütun için rows farklı gerekir:

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, Bu iyi çalışıyor. Benim bir şüphem var ve her zaman oldu. Min (col1) bitti .. burada nasıl çalışır. max (col1) üzerinde .. ayrıca istenen sonucu verir. Fark ne. – user3901666

+1

@ user3901666: Bu, Standatd SQL'in Teradata'daki LEAD (col_1, n) türünü taklit etmenin bir yoludur. Pencerenin boyutu tam olarak bir satır olduğu için 'MIN' ve 'MAX' aynı değeri döndürür. – 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; 

} bu yukarıda kullandığı Oracle 10g, diğer db başka bir strateji olmalıdır.

+0

Çok teşekkürler Dieter, Mükemmel çalışıyor. @ nirjhar - bunu teradatada nasıl uygulayacağınızı tam olarak bilmiyorsunuz. Yardımlarınız için teşekkürler. – user3901666