2015-06-18 4 views
0

Ниже приведены таблицы проб, я работаю наMySQL запрос, чтобы выбрать два столбца из тех же таблиц

Таблицы 1

╔════╦══════════════╦══════╗ 
║ KID║ REV   ║ REDO ║ 
╠════╬══════════════╬══════╣ 
║ 1 ║ 43453453345 ║ 2 ║ 
║ 1 ║ 2433423423 ║ 1 ║ 
║ 2 ║ 23423423  ║ 1 ║ 
║ 2 ║ 5566533  ║ 2 ║ 
╚════╩══════════════╩══════╝ 

мне нужно выбрать REV из таблицы 1 с использованием KID и REDO и введите таблицу 2, чтобы получить результат, как показано ниже.

Таблица 2

╔════╦══════════════╦════════════╗ 
║ KID║ REDO1  ║ REDO2  ║ 
╠════╬══════════════╬════════════║ 
║ 1 ║ 43453453345 ║2433423423 ║ 
║ 2 ║ 23423423  ║ 5566533 ║ 
╚════╩══════════════╩════════════╝ 

т.е. должны прийти все REV 'ы с REDO = 1 должен прийти под REDO1 и REV' ы с REDO = 2 при REDO2, все KID не является уникальным. Как это сделать с помощью простого mysql? Пожалуйста, помогите мне

+0

Вы хотите, чтобы отобразить redo1 и redo2 согласно повторить номер в table1? – Wanderer

+0

@Ullas Мне нужно выбрать 'redo1' и' redo2', используя как 'kid', так и' redo' –

ответ

2

Вы можете использовать следующий запрос для получения требуемого результата набора:

SELECT KID, 
     MAX(CASE WHEN REDO = 1 THEN REV) AS REDO1, 
     MAX(CASE WHEN REDO = 2 THEN REV) AS REDO2 
FROM Table1 
GROUP BY KID 

выше использует условное агрегацию для того, чтобы поместить все REV значения, связанные со значением REDO = 1 под REDO1 выходное поле и все значения REV, которые связаны с величиной REDO = 2 под REDO2 поле ввода

Если вы хотите вставить результат выше в Table2, вы можете использовать INSERT INTO SELECT заявление:

INSERT INTO Table2 
SELECT KID, MAX(CASE WHEN REDO = 1 THEN REV END), 
     MAX(CASE WHEN REDO = 2 THEN REV END) 
FROM Table1 
GROUP BY KID; 

Demo here

+0

Спасибо, но я использую 'COALESCE', потому что я выбираю из нескольких' table1'. Как мне включить это? –

+0

@AafreenFirdaus В каких полях используется «COALESCE»? –

+0

на обоих REV, потому что я ищу 4 разных таблицы с той же структурой, что и 'Таблица 1' –

Смежные вопросы