2016-07-07 31 views
2

Nächster Schritt aus here (während Zeilen in Spalten Transformation):SQL Select - kombinieren zwei Tabellen

Auf einer Informix-Datenbank (keine Pivot-Option), I für eine dynamische Art und Weise bin auf der Suche in den folgenden Tabellen mit SQL zu transformieren:

Erste Tabelle: "Katalog"

 
book  | info | value 
----------------------------- 
Moby Dick | price | high 
Moby Dick | stock | few 
Hamlet  | price | low 
Hamlet  | stock | many 
Faust  | price | medium 
Faust  | stock | normal 

Zweite Tabelle: "Künstler"

 
book  | author 
------------------------------------------ 
Moby Dick | Herman Melville 
Hamlet  | William Shakespeare 
Faust  | Johann Wolfgang von Goethe 

Die resultierende Tabelle, die ich erreichen möchte:

 
book  | price | stock | author 
------------------------------------------------------------- 
Moby Dick | high | low | Herman Melville 
Hamlet  | low | high | William Shakespeare 
Faust  | medium | normal | Johann Wolfgang von Goethe 

Der Code, den ich bisher im Sinn haben, die resultierende Tabelle zu erreichen sieht wie folgt aus.
Die Kombination von zwei Tabellen:

 
SELECT T1.book, 
     T1.info, 
     T1.value, 
     T2.book, 
     T2.author 
FROM catalog T1, 
    artists T2 
WHERE T1.book=T2.book 

Transforming Zeilen in Spalten:

 
SELECT book, 
MAX(CASE WHEN info = 'price' THEN value END) as price, 
MAX(CASE WHEN info = 'stock' THEN value END) as stock 
FROM catalog 
GROUP BY book 

Aber leider bin ich nicht in der Lage diese beiden zu kombinieren.

Danke für Ihre Hilfe!

+0

Ich bin nicht sicher, was Sie haben und was Sie wollen ..... 'Ich habe Sie this' geben' Table' Resultierende? Was ist deine Wunschausgabe? –

+0

Ich möchte die resultierende Tabelle. Der Code ist, wo ich gerade stehe. Ich versuche es klarer zu machen. – LordGhettofaust

+1

Also, was ist Ihre aktuelle Abfrage und Ergebnis? So können wir sehen, was jetzt falsch ist und dir sagen, wie es zu deinem Wunschergebnis kommt. Weil du in deiner anderen Frage arbeitest. –

Antwort

1

Ist das, was Sie wollen?

SQL Fiddle Demo

SELECT T1.book, 
     MAX(CASE WHEN info = 'price' THEN value END) as price, 
     MAX(CASE WHEN info = 'stock' THEN value END) as stock, 
     MAX(T2.author) as author 
FROM catalog T1 
JOIN artists T2 
    ON T1.book = T2.book 
GROUP BY T1.book; 

OUTPUT

|  book | price | stock |      author | 
|-----------|--------|--------|----------------------------| 
|  Faust | medium | normal | Johann Wolfgang von Goethe | 
| Hamlet | low | many |  William Shakespeare | 
| Moby Dick | high | few |   Herman Melville | 
+0

Nun, das sieht gut aus. Gib mir einen Moment, um es zu reproduzieren. :-) – LordGhettofaust

+0

Ja, ist es. Vielen Dank! Habe wieder viel gelernt ... – LordGhettofaust

1

Eine Methode ist die Aggregation zu tun, bevor die join, wie dies zu tun:

select a.book, c.price, c.stock, a.author 
from artists a left join 
    (select c.book, 
      max(case when info = 'price' then value end) as price, 
      max(case when info = 'stock' then value end) as stock 
     from catalog c 
     group by c.book 
    ) c 
    on a.book = c.book; 

Oder Sie können join zuerst und dann Aggregat:

SELECT a.book, 
     MAX(CASE WHEN c.info = 'price' THEN c.value END) as price, 
     MAX(CASE WHEN c.info = 'stock' THEN c.value END) as stock, 
     a.author 
FROM catalog c JOIN 
    artists a 
    ON c.book = a.book 
GROUP BY a.book, a.author; 
Verwandte Themen