2016-07-20 7 views
0

これは実際の出力です。列データを2つの列に分割する

DEPTNO ENAME    SAL 
---------- ---------- ---------- 
     30 JAMES    950 
     31 WARD    1250 
     32 MARTIN   1250 
     33 TURNER   1500 
     34 ALLEN   1600 
     35 BLAKE   2850 

しかし、私はジャスパー報告のためにこれを分割します。

DEPTNO ENAME    SAL  DEPTNO ENAME    SAL 
---------- ---------- ---------- ---------- ---------- ---------- 
     30 JAMES    950   31 WARD    1250 
     32 MARTIN   1250   33 TURNER   1500 
     34 ALLEN   1600   35 BLAKE   2850 

私はクエリまたはジャスパーコンポーネント(私はすでにデザインを変更しました)で変更する必要があることを教えてください。

そして、私はoracleを使用しています。 ありがとうございます。

+1

しないでくださいこれはオラクルで - あなたはジャスパーでこれを行うべきです。 – MT0

+0

これは、レポート/バンドの列を使用してJasperReportsで実行できます。 – tobi6

答えて

-1

ダイナミックSQLを使用しないとできません。クエリの1つは

with t(DEPTNO, ENAME , SAL) as (
select  30, 'JAMES',    950 from dual union all 
select  31, 'WARD',    1250 from dual union all 
select  32, 'MARTIN',   1250 from dual union all 
select  33, 'TURNER',   1500 from dual union all 
select  34, 'ALLEN',   1600 from dual union all 
select  35, 'BLAKE',   2850 from dual union all 
select  36, 'MIKE',    2850 from dual), 
w as (select DEPTNO, ENAME , SAL ,mod(rownum,3) as rn, rownum as ct from t) 
select 
    EXTRACTVALUE(DEPTNO_ENAME_SAL_XML,'/PivotSet/item[1]/column[1]') as DEPTNO1, 
    EXTRACTVALUE(DEPTNO_ENAME_SAL_XML,'/PivotSet/item[1]/column[2]') as ENAME1, 
    EXTRACTVALUE(DEPTNO_ENAME_SAL_XML,'/PivotSet/item[1]/column[3]') as SAL1, 
    EXTRACTVALUE(DEPTNO_ENAME_SAL_XML,'/PivotSet/item[2]/column[1]') as DEPTNO2, 
    EXTRACTVALUE(DEPTNO_ENAME_SAL_XML,'/PivotSet/item[2]/column[2]') as ENAME2, 
    EXTRACTVALUE(DEPTNO_ENAME_SAL_XML,'/PivotSet/item[2]/column[3]') as SAL2 from w 
    pivot xml(max(ct) for (DEPTNO, ENAME , SAL) in(any,any,any)) 
order by DEPTNO1 

です。ご覧のとおり、列名を指定します。あなたは、Oracle内の列名が、最大列名を生成するための独自のプロシージャを記述することができます255

+0

Oracleはこのための解決策ではありません。 OPには簡単なクエリーがあり、クエスチョンを変更せずにJasper Reportsでどのように表示されるかを変更できる必要があります。 – MT0

+0

@ MT0あなたが正しいと思われます。私は目が見えずジャスパーに関する話題の言葉を見ていませんでした。 –

+0

もちろん、これは動的SQLなしで行うことができます。それがSQLで行われるべきであるということを意味しません。 MT0は絶対に正しいです。 – mathguy

0

はこれを試してくださいされています。テストケースのためのいくつかの他のデータと

with a(DEPTNO, ENAME, SAL, rn) as (
    select a.*, rownum rn from (
     select 30, 'JAMES', 950 from dual union 
     select 31, 'WARD', 1250 from dual union 
     select 32, 'MARTIN',1250 from dual union 
     select 33, 'TURNER',1500 from dual union 
     select 34, 'ALLEN', 1600 from dual union 
     select 35, 'BLAKE', 2850 from dual 
     -- union another 1 row to show you, what if EMP > even number 
     union 
     select 39, 'JACK', 3850 from dual) a 
     ) 

select a1.deptno, 
     a1.ename, 
     a1.sal, 
     a2.deptno, 
     a2.ename, 
     a2.sal 
    from a a1 left join a a2 on a1.rn + 1 = a2.rn 
    where mod(a1.rn,2) = 1 

出力:

DEPTNO ENAME   SAL  DEPTNO ENAME   SAL 
---------- ------ ---------- ---------- ------ ---------- 
     30 JAMES   950   31 WARD   1250 
     32 MARTIN  1250   33 TURNER  1500 
     34 ALLEN  1600   35 BLAKE  2850 
     39 JACK   3850        
+0

Oracleはこのための解決策ではありません。 OPには簡単なクエリーがあり、クエスチョンを変更せずにJasper Reportsでどのように表示されるかを変更できる必要があります。 – MT0

関連する問題