2017-01-20 10 views
-2

Beispieltabellen und gewünschtes Ergebnis: Die unten gezeigte Ergebnistabelle ist der Ausgang, den ich tatsächlich möchte.2 Tabellen zusammenfügen und nach ID, Priorität und Nummer anzeigen

1

versucht, die folgende Abfrage mit Pivot:

with pivot_data AS 
(
    select client_id 
     ,ph_type 
     ,Ph_number 
    from client_table 
    inner join phone_table 
     on client_table.phone_id = phone_table.ph_id 
) 
select * 
from pivot_data 
pivot (sum(ph_number) 
     for ph_type in ('c','w','h') 
    ); 

Ergebnis bekam ich:

2

Jede Hilfe würde geschätzt. Antworten in SQL-Server wäre toll, aber Oracle & MySQL ist auch willkommen, wenn sie mich in die richtige Richtung zeigen können. :)
Vielen Dank im Voraus.

+6

mysql oder SQL-Server oder Orakel? – Jens

+1

Ich kann keine Frage sehen? Sie haben einige Daten - formatieren Sie sie bitte als Text (oder besser noch als DML-Anweisungen) - und eine Abfrage und eine Ausgabe, aber Sie sagen nicht, was damit nicht stimmt oder was Sie stattdessen erwarten ... wie sollen wir das überhaupt? versuche dir zu helfen? – MT0

+0

Wie viele Prioritätsstufen kann es geben? Und warum brauchst du dein Ergebnis in diesem Format? Ist das nicht besser geeignet, um in Ihrer Präsentationsebene formatiert zu werden? – iamdave

Antwort

0

Oracle Abfrage:

SELECT * 
FROM (
    SELECT client_id, priority, phone_number, phone_type 
    FROM client_table c 
     LEFT OUTER JOIN 
     phone_table p 
     ON (c.phone_id = p.phone_id) 
) 
PIVOT (MAX(phone_type) AS phonetype, MAX(phone_number) AS phonenumber 
     FOR priority IN (1 AS Prio1, 2 AS Prio2, 3 AS Prio3)); 

Ausgang:

CLIENT_ID PRIO1_PHONETYPE PRIO1_PHONENUMBER PRIO2_PHONETYPE PRIO2_PHONENUMBER PRIO3_PHONETYPE PRIO3_PHONENUMBER 
---------- --------------- ----------------- --------------- ----------------- --------------- ----------------- 
     1 C    9999999999  H    5555555555  W    7777777777   
+0

Mann, das war was ich wollte, vielen Dank !! Ich hatte gedacht, dass ich Pivot verwenden sollte, aber etwas grün zu sein, konnte nicht herausfinden, wie. Vielen Dank :) –

0

Sie müssen wirklich auf set based thinking etwas zu lesen tun und wie das, was Sie fordern wird Ihre Wartung sehr schädlich sein der SSIS-Lösung nach vorne.

Alles, was Sie tun müssen, ist die Daten so zu exportieren, wie sie sind. Wenn Sie absolut alles in einer CSV-Datei haben müssen, nur join die beiden Tabellen zusammen und behalten eine normalisierte, skalierbare Datenmenge, die nicht brechen wird, wenn die Zahl der Prioritäten erhöht:

select c.client_id 
     ,c.phone_id 
     ,c.priority 
     ,p.phone_type 
     ,p.phone_number 
from @Client c 
    join @Phone p 
     on c.phone_id = p.phone_id 
Verwandte Themen