2017-03-16 3 views
-4

ich Oracle 11g bin mit zeigen, habe ich eine Abfrage, die wie dieseWie diese beiden Zeilen als eine Zeile

╔═══════════╦═════════════╗ 
║ Number ║ NAME  ║ 
╠═══════════╬═════════════╣ 
║ 1   ║ Steve ║ 
║ 2   ║ John  ║ 
╚═══════════╩═════════════╝ 

zwei Zeilen oder weniger, somthing kehrt Und es könnte auch dieses

╔═══════════╦═════════════╗ 
║ Number ║ NAME  ║ 
╠═══════════╬═════════════╣ 
║ 1   ║ Steve ║ 
║ 1   ║ Steve ║ 
╚═══════════╩═════════════╝ 
aussehen zurückkehren

Oder diese

╔═══════════╦═════════════╗ 
║ Number ║ NAME  ║ 
╠═══════════╬═════════════╣ 
║ 1   ║ Steve ║ 
╚═══════════╩═════════════╝ 

ich möchte die Daten als diese

neu zu ordnen
╔═══════════╦═════════════╦═════════════╗ 
║ whatever ║ NAME1 ║  NAME2 ║ 
╠═══════════╬═════════════╬═════════════╣ 
║  ss ║ Steve ║ John  ║ 
╚═══════════╩═════════════╩═════════════╝ 

Oder diese im anderen Fall

╔═══════════╦═════════════╦═════════════╗ 
║ whatever ║ NAME1 ║  NAME2 ║ 
╠═══════════╬═════════════╬═════════════╣ 
║  ss ║ Steve ║ Steve ║ 
╚═══════════╩═════════════╩═════════════╝ 

Oder dies auf Fall einer Reihe

╔═══════════╦═════════════╦═════════════╗ 
║ whatever ║ NAME1 ║  NAME2 ║ 
╠═══════════╬═════════════╬═════════════╣ 
║  ss ║ Steve ║ (null) ║ 
╚═══════════╩═════════════╩═════════════╝ 

Falls keine Zeilen, sollte es so

╔═══════════╦═════════════╦═════════════╗ 
║ whatever ║ NAME1 ║  NAME2 ║ 
╠═══════════╬═════════════╬═════════════╣ 
║  ss ║ (null) ║ (null) ║ 
╚═══════════╩═════════════╩═════════════╝ 

ich sein Ich möchte die Leute nicht mit meinen fehlgeschlagenen Fragen verwechseln und an einen Neuanfang denken. Ich probierte mehrere Unterabfragen, die val basierend auf Zeile = 1 oder 2 zurückgeben, aber fehlgeschlagen, da ich die Zahl übergeben muss, und es scheint, dass mehrere Unterabfragen keine Zahl von außerhalb von mehr als 2 Ebenen akzeptieren. versuchte auch, den Pivot zu benutzen, aber ich konnte meinen Kopf nicht um mich herum bewegen, und ich habe auch keine Aggregatfunktion hier, also nicht sicher, wie ich sie hier benutzen kann.

+0

Ihre Eingabedaten haben immer genau eine Spalte und zwei Zeilen? Wenn nicht, was ist die Anforderung im Allgemeinen? Zum Beispiel, was ist, wenn drei Zeilen vorhanden sind? Oder 1 Million Zeilen? – mathguy

+0

Ja, meine Eingabedaten haben immer zwei Spalten und zwei Zeilen oder weniger. – Mocas

+0

Ich sehe eine Menge Beschreibung darüber, was Sie wollen, aber nichts über das, was Sie tatsächlich versucht haben. – csmckelvey

Antwort

1

Oracle-Setup:

CREATE TABLE your_query (id, name) AS 
    SELECT 1, 'Steve' FROM DUAL UNION ALL 
    SELECT 1, 'Steve' FROM DUAL; 

Abfrage:

SELECT 'ss' AS whatever, 
     name1, 
     name2 
FROM (
    SELECT name, 
     ROW_NUMBER() OVER (ORDER BY id, name) AS rn 
    FROM your_query 
) 
PIVOT (MAX(name) FOR rn IN (1 AS Name1, 2 AS Name2)); 

Ou tput:

WHATEVER NAME1 NAME2 
-------- ----- ----- 
ss  Steve Steve 
+0

Ihre Abfrage funktioniert wie erwartet und gibt die Werte als zwei Spalten zurück, aber leider kann ich keinen Parameter an meine Abfrage innerhalb von außerhalb übergeben, da ich alle Ihre Abfrage als Sub Abfrage. Gute Arbeit – Mocas

-1

Für Ihren Fall, in dem die Eingabe enthält immer zwei Zeilen:

create table #mytable (number int, name varchar(50)) 
insert into #mytable values (1, 'Steve') 
insert into #mytable values (2, 'John') 

select 
    M1.number as 'whatever', 
    M1.name as 'Name1', 
    M2.name as 'Name2' 
from #mytable M1 
inner join #mytable M2 
on M1.number < M2.number 
Verwandte Themen