2016-05-12 11 views
0

こんにちは、私は次の表に特定のID番号に特定の列数を選択する方法は?

table_A 

ID NAME PRICE DATE 
123 JOHN 22  1/1/2010 
234 KING 50  5/10/2009 
345 JACK 400  30/11/210 

アウト期待入れている:

を私は拳IDと第2のIDおよび第三IDのための3番目の列のための第二列の最初の列を選択します。

ID VALUES 
123 JOHN 
234 50 
345 30/11/2010 

マイクエリ: は、1)それは組合異なるデータタイプ 2)その困難なので、すべてのIDとを入力するには、多くのない操作を行います。私のクエリは正しくない

select ID, NAME 
from table_A 
where ID = 123 

union all 

select ID, PRICE 
from table_A 
where ID = 234 

union all 

select ID, DATE 
from table_A 
where ID = 345; 

つの理由組合

それは自動的に2番目の列の最初の列と第二の融資のための最初のローンを選ぶので、より良いクエリーを必要とする...

+0

? –

+0

文字列に、各列の変換について、組合はその後、どのように動作するはず – Stivan

+0

我々は、ループを使用してのような何かをcannt。 – Qasim0787

答えて

1

これは動作しますが、あなたは同じフォーマットにすべてのデータを変換する必要があります:正確に何をしようとする

with test_data(ID1, NAME1, PRICE, DATE1) 
as (
select 123, 'JOHN', 22,  '1/1/2010' from dual union all 
select 234, 'KING', 50,  '5/10/2009' from dual union all 
select 345, 'JACK', 400, '30/11/210' from dual 
) 

select ID1, DATA 
FROM 
(
    select ID1, DATA, COL, 
    row_number() over (partition by ID1 order by id1) RN, 
    dense_rank() over (order by id1) DR 
    from (
    select 
     cast(ID1 as varchar(10)) ID1, 
     cast(NAME1 as varchar(10)) NAME1, 
     cast(PRICE as varchar(10)) PRICE, 
     cast(DATE1 as varchar(10)) DATE1 
    FROM test_data 
) 
    unpivot 
    (
    DATA for COL in (NAME1, PRICE, DATE1) 
) 
) 
where DR = RN 


ID1  DATA  
---------- ---------- 
123  JOHN  
234  50   
345  30/11/210 
0
select 
    cast(ID as varchar(10)), 
    cast(NAME as varchar(10)) 
from table_A 
where ID = 123 

union all 

select 
    cast(ID as varchar(10)), 
    cast(PRICE as varchar(10)) 
from table_A 
where ID = 234 

union all 

select 
    cast(ID as varchar(10)), 
    cast(DATE as varchar(10)) 
from table_A 
where ID = 345; 
+0

私は3つのIDと3つの列を持っていますが、現実の100の列と100のIDを持つようなテーブルを作成しました。そのような大きなコードを作成することは困難です。 – Qasim0787

関連する問題