0

私はこのように見えるいくつかのデータを持っています -

ColA     ColB    ColC
ID1      1       '1-1'
ID2      1       '2-1'
ID2      0       '2-2'
ID3      1       '3-1'
ID3      1       '3-2

ColA の値で行をグループ化し、グループ内のすべての行が ColB=1 の場合にのみ連結された ColC の値を返すクエリ (Oracle 10g 用) が必要です。したがって、指定されたデータに必要な出力は次のようになります-

"1-1"
"3-1,3-2"

このようなクエリを作成する方法について何か提案はありますか?

ありがとう!

4

2 に答える 2

1
  SELECT colA, wm_concat(ColC)
    FROM table_name
   WHERE colB = 1
GROUP BY colA;

編集- 次のように LISTAGG 集計関数を使用することもできます。

  SELECT colA, LISTAGG(colC, ',') WITHIN GROUP (ORDER BY ColC)
    FROM table_name
   WHERE colB = 1
GROUP BY colA;

wm_concat ではなく、Oracle によって文書化されているため、LISTAGG を使用することをお勧めします。

編集: ColB = 0、または colB != 1 の行が 1 つあるため、ID2 のような行を表示したくない場合は、次のようにすることができます。

  SELECT colA, wm_concat(ColC)
    FROM table_name t1
   WHERE NOT EXISTS (SELECT 1
                       FROM table_name t2
                      WHERE colB != 1 -- Or, you can give colB = 0
                        AND t2.ColA = t1.ColA)
GROUP BY colA
于 2013-03-21T04:50:47.723 に答える
0

使用しているOracle10g場合

select o1 from (select wm_concat(c3) o1,wm_concat(c2) o2 from table group by c1)
where length(o2)-length(replace(o2,'0',''))=0

為に11g

select o1 from (select listagg(c2,',') within group (order by c1) o2,
listagg(c3,',') within group (order by c1) o1 from table group by c1)
where length(o2)-length(replace(o2,'0',''))=0
于 2013-03-21T05:27:28.553 に答える