2016-03-24 14 views
0

Umut her şey yolunda. o yalnızca bir satır görüntüler öyle ki "" Ben virgül kaldırmak için aşağıdaki benim kodunu düzenlemek nasılListagg sözdizimi Oracle 10, 11

Test  ID 
Adis, Nike 123 
,   123 

: Burada

Select 
Soccer||', ' ||football as test, 
ID 
From sport 
Where ID = 123 

yukarıdaki sorgunun sonuç: Ben basit bir program var?

Equipment ID 
Adis, Nike 123 

birileri görüş bildirmek misiniz:

Select 
LISTING (a.test, ', ') within group (order by a.test) as equipment, 
ID 
From 
    (
    Select 
    soccer||', '||football as test, 
    ID 
    From test 
    where ID =123 
    )a 
Group by I'd 

sonuç

Equipment  ID 
, , Adis, Nike 123 

My istenen sonuç gösteriyor? Ben oracle 11 teşekkürler koşuyorum!

+0

Neden başlık Oracle 10'dan bahsediyor? Çıktınızdan iki satır var, her ikisi de sütun kümesiyle, diğeri de null. Yalnızca bir değer kümesine sahip satırlarınız varsa ne yapmak istiyorsunuz? Belki daha gerçekçi/çeşitli veriler ve beklediğiniz sonucu ekleyebilirsiniz. –

cevap

1

Geçerli listagg adresiniz, var olan birleştirilmiş sonuçları, iki satır olan 'Adis, Nike' ve ', ', aralarındaki başka bir virgülle birlikte bir araya getiriyor. Birleştirme, muhtemelen gerçekten istediğin şey değil; senin dış listagg herhangi boş değerler hariç ardından

select soccer 
    || case when soccer is not null and football is not null then ', ' end 
    || football as test, id 
from sport 
where id = 123; 

TEST       ID 
---------------------- ---------- 
Adis, Nike     123 
           123 

Ve: Eğer sadece bir değer yoksa virgül atlamak yapabilir gerçi

select listagg (equipment, ', ') within group (order by equipment) as equipment, id 
from (
    select soccer 
    || case when soccer is not null and football is not null then ', ' end 
    || football as equipment, id 
    from sport 
    where id = 123 
) 
where id = 123 
and equipment is not null 
group by id; 

EQUIPMENT        ID 
------------------------------ ---------- 
Adis, Nike       123 

Ayrıca sütunları dönüştürmek için union kullanabilirsiniz

select id, soccer as equipment from sport 
union all 
select id, football as equipment from sport; 

     ID EQUIPMENT      
---------- ------------------------------ 
     123 Adis       
     123        
     123 Nike       
     123        

ve daha sonra geri döner listesini araya ve sıfır e hariç, bir satır içi görünüm olarak kullanan: ayrı sıra (el UNPIVOT bir tür) içine ntries:

select listagg (equipment, ', ') within group (order by equipment) as equipment, id 
from (
    select id, soccer as equipment from sport 
    union all 
    select id, football as equipment from sport 
) 
where id = 123 
and equipment is not null 
group by id; 

EQUIPMENT        ID 
------------------------------ ---------- 
Adis, Nike       123 
+0

Teşekkürler! @ Alex. Kodu test edeceğim. – joe

+0

Merhaba Alex, bir Simi sütunu eklemek istediğimi varsayalım (;). Sonuç: Adis, usa; Nike, usa. – joe

+0

@joe - daha sonra virgülle ilgili ilk sürümü kullanın; ve sonra listagg içinde bir noktalı virgül? –