2017-02-08 6 views
0

Ich bin in der Lage, mit einer Bedingung abzufragen (wie in Bild unten), aber wenn ich mit ein paar Kriterien abfragen und versuchen, zwei gleiche Spalten der gleichen Tabelle mit unterschiedlichen Kriterien zu erstellen, Ich bekomme kein Ergebnis. 2. Bild ist das erwartete Ergebnis, das ich nicht abrufen kann. Alle Eingaben werden sehr geschätzt. Vielen Dank.Join Spalten derselben Tabelle mit unterschiedlichen Kriterien - SQL

select save_line from save_output_table 
where execution_id in ('292') 
    and seq_id = '0' 
    and save_type='R' 
order by line_id ASC 

+------------+ 
| Save_line | 
+------------+ 
|   17 | 
|   22 | 
|   23 | 
+------------+ 



SELECT 
(select save_line 
    from save_output_table 
    where execution_id in ('292') 
    and seq_id = '0' 
    and save_type='R' 
    order by line_id ASC 
) as save_line1, 
(select save_line 
    from save_output_table 
    where execution_id in ('286') 
    and seq_id = '0' 
    and save_type='R' 
    order by line_id ASC 
) as save_line2 
from save_output_table 

+-------------+------------+ 
| Save_line 1 | Save_line2 | 
+-------------+------------+ 
|   17 |   9 | 
|   22 |   5 | 
|   23 |   3 | 
+-------------+------------+ 

Beispieldaten:

+---------------+--------+-----------+---------+-----------+ 
| execution_id | seq_id | save_type | line_id | save_line | 
+---------------+--------+-----------+---------+-----------+ 
|   286 |  0 | R   |  1 |  17 | 
|   286 |  0 | R   |  2 |  22 | 
|   286 |  0 | R   |  3 |  23 | 
|   286 |  0 | D   |  1 |  17 | 
|   286 |  0 | D   |  2 |  22 | 
|   286 |  0 | D   |  3 |  23 | 
|   292 |  0 | R   |  1 |   9 | 
|   292 |  0 | R   |  2 |   5 | 
|   292 |  0 | R   |  3 |   3 | 
|   292 |  0 | D   |  1 |  98 | 
|   292 |  0 | D   |  2 |  622 | 
|   292 |  0 | D   |  3 |  273 | 
+---------------+--------+-----------+---------+-----------+ 
+1

Ihr erwartetes Ergebnis benötigt mehr Logik, um zu erreichen. Angenommen, Ihre Spalte x1 ergibt 3 Zeilen: a, b, c; Ihre Spalte x2 hat 4 Zeilen: x, y, z, t. Was wird dein erwartetes Ergebnis sein? '(ax, by, cz, null-t)' oder '(ay, bt, cz, null-x)' oder '(ax, ay, a-z, at, bx, by, ........ .) ' –

+0

@ PhamX.Bach betrachten sie eine Zeile. Ich muss nur zweimal die gleiche Spalte mit unterschiedlichen Bedingungen auswählen und meine Abfrage gibt mir nicht die richtige Ausgabe. es gibt mir immer die erste Reihe. –

+0

Ihre Beschreibung ist unklar, und Ihr erwartetes Ergebnis ist nur zwei Kopien der gleichen Ausgabe. Bitte geben Sie einige Beispieldaten und Ihre gewünschte Ausgabe an. (Siehe [Wie formatieren Sie SQL-Tabellen in einem Stapelüberlauf Post?] (Http://meta.stackexchange.com/q/96125) für, wie Sie einige hinzufügen.) –

Antwort

1

Also, wenn Sie eine Liste save_line von line_id wollen, um in verschiedenen Spalten nach save_type und execution_id, müssen Sie schwenken. Es gibt ein paar verschiedene Möglichkeiten, wie Sie dies tun können. Hier sind ein paar, die egal funktionieren sollte, was Geschmack von SQL Sie verwenden:

SELECT line_id, 
max(CASE WHEN execution_id = '292' and save_type = 'R' then save_line end) R_292, 
max(CASE WHEN execution_id = '286' and save_type = 'R' then save_line end) R_286 
FROM save_output_table 
GROUP BY line_id 

oder

SELECT t1.save_line save_line1, 
t2.save_line save_line2 
FROM 
    (SELECT * 
    FROM save_output_table 
    WHERE save_type = 'R' 
    and execution_id = '292' 
    ) t1 

JOIN (SELECT * 
    FROM save_output_table 
    WHERE save_type = 'R' 
    and execution_id = '286' 
    ) t2 
ON t1.line_id = t2.line_id 

Hinweis: für die zweite Option, die nur beitreten gibt vollständige Liste, wenn es die gleichen sind Anzahl der line_ids für jede Bedingung. Wenn nicht, sollten Sie es in einen FULL OUTER JOIN ändern, der in MySQL und möglicherweise anderen nicht funktionieren würde.

Verwandte Themen