2016-04-01 14 views
0

3 tablolarım var: table_A, table_B ve table_C. Table_A bir birincil anahtara sahiptir ve table_B'den bir yabancı anahtar tarafından belirtilir. Table_C, table_B'den bir yabancı anahtar tarafından belirtilen bir birincil anahtara sahiptir. tasarım şu şekildedir:Oracle sorgusunda listagg üzerinde bir koşul nasıl kullanılır?

Table_A: ID_A TextData

Table_B: ID_B ID_A ID_C

Table C: ID_C TextData

sorgusu:

select a.id_a, a.textdata, listagg(c.textdata, ', ') within group (order by c.id_c) data_c from table_a a inner join table_b b on (a.id_a = b.id_a) inner join table_c c on (b.id_c = c.id_c) where c.textdata like :data group by a.id_a, a.textdata;

Sadece c.textdata biri masanın değil, veri almak listagg'dan. Bu sorguyu kullanarak denerseniz: Ben veri gerektiğinden, grup işlevi nasıl listagg parametresine bir koşul vermek için buraya

izin verilmez:

select a.id_a, a.textdata, listagg(c.textdata, ', ') within group (order by c.id_c) data_c from table_a a inner join table_b b on (a.id_a = b.id_a) inner join table_c c on (b.id_c = c.id_c) where listagg(c.textdata, ', ') like :data group by a.id_a, a.textdata;

bir hata gibi olsun listagg?

select * 
from (
     select a.id_a, 
      a.textdata, 
      listagg(c.textdata, ', ') within group (order by c.id_c) data_c 
     from table_a a 
      inner join table_b b on (a.id_a = b.id_a) 
      inner join table_c c on (b.id_c = c.id_c) 
     group by a.id_a, a.textdata 
    ) 
where data_c like :data 

veya LISTAGG tarafından inşa sahadaki koşulları uygulamak için HAVING kullanarak:

cevap

1

Sorgunuzu sarma deneyebilirsiniz i sorguyu çalıştırmayı denedi

select a.id_a, 
     a.textdata, 
     listagg(c.textdata, ', ') within group (order by c.id_c) data_c 
from table_a a 
     inner join table_b b on (a.id_a = b.id_a) 
     inner join table_c c on (b.id_c = c.id_c) 
group by a.id_a, a.textdata 
having listagg(c.textdata, ', ') within group (order by c.id_c) like :data 
+0

ve ben sonuç gibi olsun this: "data_c": geçersiz tanımlayıcı – user3505775

+0

Üzgünüm, hatalı bir durumum var. desteğiniz için teşekkürler: D – user3505775