2016-05-12 7 views
0

Hallo Ich habe folgende TabelleWie wählt man die spezifische Anzahl der Spalten für die spezifische ID-Nummer?

table_A 

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

Erwartet löschte:

ich erste Spalte für die Faust-ID und die zweite Spalte für die zweite ID und dritte Spalte für dritte ID auswählen möchten.

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

Meine Frage:

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; 

Zwei Grund, dass meine Frage nicht korrekt ist: 1) es verschiedene Datentypen 2) seine schwer zu geben alle ID und so nicht Vereinigung tun, viele Gewerkschaften

so besser Abfrage benötigen, wird es automatisch erste Darlehen für die erste Spalte und zweite Darlehen für die zweite Spalte ...

+0

was genau wollen Sie tun? –

+0

Wie wäre es mit der Umwandlung jeder Spalte in eine Zeichenfolge, Union sollte funktionieren dann – Stivan

+0

können wir nicht tun, etwas wie Loop verwenden. – Qasim0787

Antwort

1

Dies funktioniert, aber Sie müssen alle Ihre Daten in das gleiche Format konvertieren:

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; 
holen
+0

Ich habe diese Tabelle zum Beispiel erstellt, in der ich nur 3 ID und 3 Spalten habe, aber im wirklichen Leben 100 von Spalten und 100 von ID. Es ist schwierig, einen so großen Code zu erstellen. – Qasim0787

Verwandte Themen