2016-04-10 18 views
0

aşağıda benzeyen bir teradata masası var bendönüştürme teradata tablo sütunları değerleri

ile mücadele ediyorum belirli bir sorunu çözmek için yardımınıza ihtiyacım ayrılmış.

Queryid Databasename Tablename 
101  DB1    TB1 
101  DB2    TB2 
101  DB1    TB3 
102  DB3    TB3 
102  DB4    TB4 
.  .    . 
.  .    . 
.  .    . 

Çıkışı aşağıdaki biçime ihtiyacım var.

Queryid Newcol 
101  DB1.TB1,DB2.TB2,DB1.TB3 
102  DB3.TB3,DB4.TB4 
.   ....... 
.   ....... 

Ben TD13.10 kullanıyorum ve XML servisleri yoktur ve ayrıca TDStats işlev kullanılamaz.

Herhangi bir yardım muazzam olurdu ..

Teşekkür

+0

QryLogObjectsV analizini yapan bir sorgu gibi görünüyor, işleyeceğiniz veri hacmi nedir? Ve sonuçta ne yapıyorsun? – dnoeth

+0

Merhaba Dieter, 1 aylık verileri işlemeye çalışıyorum, her sorguid için bir satırım olduğu bir satır oluşturmaya çalışıyorum ve bu satırda totalampcputime, responsetime ve o queryid tarafından erişilen nesnelerim var. sorguid başına erişilen tüm nesneler için birden çok satır varsa, amperputim ve yanıt süresi toplam satır sayısıyla çarpılır ve sonuçta sonuç yanlış olur. – SRG

cevap

0

Sen özyinelemeli ile kullanabilirsiniz. Yinelemeli olarak ve başka bir tablo kullanmak zorunda olsanız da, bu tabloyu, değerleri hileci sayısına göre birleştirmek için kullanın.

CREATE VOLATILE TABLE temp_tbl AS (
SELECT 
    queryid      
    ,databasename ||'.'||tablename               
    ,ROW_NUMBER() OVER (PARTITION BY queryid ORDER BY queryid) AS rnk 
FROM temp 
) WITH DATA PRIMARY INDEX(parent_id) ON COMMIT PRESERVE ROWS 

WITH RECURSIVE test1(query,databasename,tablename,LVL) 


AS 
    (
    SELECT queryid,databasename,tablename, 1 
    FROM <tablename> 
    WHERE rnk = 1 
    UNION ALL 
    SELECT queryid, TRIM(databasename) || ', ' || TRIM(tablename),LVL+1 
    FROM temp_tbl INNER JOIN test1 
    ON queryid = query 
    AND temp_tbl.rn = test1.lvl+1 
    ) 
    SELECT query,databasename,tablename,LVL 
    FROM test1 
QUALIFY RANK() OVER(PARTITION BY query ORDER BY LVL DESC) = 1; 
+0

Cevabınız için teşekkürler Aritra .. Sadece bazı sorular .. aşağıdaki semboller ne anlama geliyor ... 1) temp (Bu işleniyor olan veriyi saklamak için kullanılan tablodur, 2) PRIMARY INDEX (parent_id), 3) FROM , burada hangi tablo kullanılmalı 4) INNER JOIN rec_test, bu tabloyu bulamıyordum – SRG

+0

@SRG .. yest temp veri depolamak için verdiğim tabloya sadece rastgele bir isim. Birincil Endeks, geçici tablo temp_tbl üzerinde belirttiğim endekstir. Birincil dizindeki kavramlar için wiki/google'da arama yapabilirsiniz. iç birleştirici kısım, düzenlediğim test1 olacaktır, bu da mantığın, istenen sonuca ulaşmaya yardımcı olan özlü yönüdür. Eğer bu cevap hedefinize ulaşmışsa, pls kabul etsin. –

+0

Çok teşekkürler Aritra, bir deneyecek, sadece bir son soru .. özyinelemeli sorgu SELECT sorgu veritabanında, veritabanında, tabtaben, 1 FROM , neyi temsil ediyor? – SRG