2017-02-08 1 views
0

Я могу запросить с одним условием (как показано на рисунке ниже), но когда я запрашиваю пару критериев и пытаюсь создать два одинаковых столбца одной таблицы с разными критериями, я не получаю никакого результата. Второе изображение - ожидаемый результат, который я не могу извлечь. Любые материалы высоко оценены. Благодарю.Присоединение столбцов одной таблицы с разными критериями - 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 | 
+-------------+------------+ 

Образец данных:

+---------------+--------+-----------+---------+-----------+ 
| 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

Ваш ожидаемый результат требует большей логики для достижения. Скажем, ваша колонка x1 имеет три строки: a, b, c; ваш столбец x2 имеет 4 строки: x, y, z, t. Итак, каков будет ваш ожидаемый результат? '(ax, by, cz, null-t)' или '(ay, bt, cz, null-x)' или '(ax, ay, az, at, bx, by, ........ .) ' –

+0

@ PhamX.Bach считают их одной строкой. Мне просто нужно дважды выбрать один и тот же столбец с разными условиями, и мой запрос не дает мне правильный результат. его просто давая мне первый ряд все время. –

+0

Ваше описание неясно, и ваш ожидаемый результат - всего две копии одного и того же выхода. Просьба предоставить некоторые примеры данных и желаемый результат. (См. [How to формат SQL-таблиц в переполнении стека post?] (Http://meta.stackexchange.com/q/96125) для добавления некоторых.) –

ответ

1

Так что, если вы хотите списки save_line в порядке line_id, в разных колонках согласно save_type и execution_id, вам нужно повернуть. Есть несколько способов сделать это. Вот пара, который должен работать независимо от того, что аромат SQL вы используете:

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 

или

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 

Примечание: для второго варианта, объединение дает только полные списки, если есть такие же количество строк для каждого условия. Если этого не произошло, вы должны изменить его на ПОЛНУЮ ВНУТРЕННУЮ РАБОТУ, которая не будет работать в MySQL и, возможно, в других.