2016-09-11 2 views
-2

Моя таблица содержит ниже записей .. Имя таблицы: Cus1DB2, используя при выполнении условия

Column: c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 

Records: 1 2 2 3 4 4 5 6 6 6 7 7 8 8 9 -1st record 
      1 2 3 3 3 4 4 5 5 5 5 6 7 7 8 -2nd record 

Как получить результат, как показано ниже, используя таблицу выше:

Column: c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 

Records: 1 2 3 4 5 6 7 8 9 NULL NULL NULL NULL NULL NULL -1st record 
      1 2 3 4 5 6 7 8 NULL NULL NULL NULL NULL NULL NULL -2nd record 

его можно в DB2, используя, если условие?

+0

Ваш вопрос очень неясен и запутан. Предоставьте свою бизнес-логику - не позволяйте нам догадываться. – MichaelTiefenbacher

+0

Привет Майкл, в моей таблице, значение lkie ниже Col с1 с2 с3 с4 с5 с6 с7 с8 с9 с10 с11 с12 с13 с14 с15 Val' 1 2 2 3 4 4 5 6 6 6 7 7 8 8 9 1 2 3 3 3 4 4 5 5 5 5 6 7 7 8 бизнес необходимо отключить, используя вышеприведенный стол, и получить resulit, как показано ниже Col c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 Val 1 2 3 4 5 6 7 8 9 Можете ли вы помочь мне в этом ..? – YAK

+0

Опишите бизнес-требование - не "как показано ниже". 17 значений не будут помещаться в 15 столбцов. – MichaelTiefenbacher

ответ

0

Не знаю, что означает «, используя условие», но возможно ли это может представлять интерес?

Установка:

create table cus1            
(c1 dec(3), c2 dec(3), c3 dec(3), c4 dec(3), c5 dec(3) 
, c6 dec(3), c7 dec(3), c8 dec(3), c9 dec(3), c10 dec(3) 
, c11 dec(3), c12 dec(3), c13 dec(3), c14 dec(3), c15 dec(3) 
) 
; 
insert into cus1 values          
    (1, 2, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7, 8, 8, 9) 
, (1, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 6, 7, 7, 8) 
; 


Используйте данные таблицы из установки для генерации запросов; каждый созданный здесь как VIEW, которое запрашивается для конечного результата:

create view cus1_unpivot_view as       
with              
    cus1_rn as            
    (select row_number() over() as rn      
     , a.*           
    from cus1 a           
)              
SELECT rn, cn, cn_val          
FROM cus1_rn as C           
, lateral             
    (values ( 1, C.c1 ), ( 6, C.c6 ), (11, C.c11) 
      , ( 2, C.c2 ), ( 7, C.c7 ), (12, C.c12) 
      , ( 3, C.c3 ), ( 8, C.c8 ), (13, C.c13) 
      , ( 4, C.c4 ), ( 9, C.c9 ), (14, C.c14) 
      , ( 5, C.c5 ), (10, C.c10), (15, C.c15) 
    ) AS X(cn, cn_val)         
; /* create an unpivot view of columns to rows */ 
create view cus1_unmatched as  
select a.rn, a.cn, b.cn_val  
from  cus1_unpivot_view as a 
left join       
     (select distinct rn, cn_val 
     from cus1_unpivot_view as d 
    ) as b      
    on a.rn=b.rn     
    and a.cn=b.cn_val    
; /* Generate unmatched values to get NULL results */ 
create view cus1_pivot as       
select rn           
    , max(case when cn=1 then cn_val end) as c1 
    , max(case when cn=2 then cn_val end) as c2 
    , max(case when cn=3 then cn_val end) as c3 
    , max(case when cn=4 then cn_val end) as c4 
    , max(case when cn=5 then cn_val end) as c5 
    , max(case when cn=6 then cn_val end) as c6 
    , max(case when cn=7 then cn_val end) as c7 
    , max(case when cn=8 then cn_val end) as c8 
    , max(case when cn=9 then cn_val end) as c9 
    , max(case when cn=10 then cn_val end) as c10 
    , max(case when cn=11 then cn_val end) as c11 
    , max(case when cn=12 then cn_val end) as c12 
    , max(case when cn=13 then cn_val end) as c13 
    , max(case when cn=14 then cn_val end) as c14 
    , max(case when cn=15 then cn_val end) as c15 
from cus1_unmatched         
group by rn           
; /* pivot row data back to columns with the NULLs */ 


Наконец, этот последний запрос VIEW, чтобы опустить строки нумерации и представить данные; сравните результаты с желаемым выходом:

select 
     c1 , c2 , c3 , c4 , c5 
    , c6 , c7 , c8 , c9 , c10 
    , c11 , c12 , c13 , c14 , c15 
from cus1_pivot 
order by rn 
; -- the following is a likeness of a report from the above query: 
....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+... 
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 
    1  2  3  4  5  6  7  8  9  -  -  -  -  -  - 
    1  2  3  4  5  6  7  8  -  -  -  -  -  -  - 
******** End of data ********               
Смежные вопросы