2014-10-03 5 views
0

Буду признателен за вашу поддержку, я хотел бы построить SQL qry, чтобы получить в результате дополнительный комментер с минимальным значением группы кодов на основе двух таблиц.SQL: как добавить столбец с минимальным значением

Например: У меня есть 2 таблицы

Таблица: экстракт

AppCode | Phase | 
------------------ 
AB | Phase 2 
ABC | Phase 1 
ABC | Phase 2 
ABCD | Phase 1 
ABCE | Phase 3 
ABCE | Phase 2 

Таблица: Этапы

PhaseName | Objective 
------------------ 
Phase 1 | 2 
Phase 2 | 4 
Phase 3 | 24 

Ожидаемый результат:

AppCode | PhaseName | Objective | MinObjetivo 
------------------ 
AB |  Phase 2 |  4 |   4 
ABC |  Phase 1 |  2 |   2 
ABC |  Phase 2 |  4 |   2 
ABCD |  Phase 1 |  2 |   2 
ABCE |  Phase 3 |  24 |   4 
ABCE |  Phase 2 |  4 |   4 

Пожалуйста, дайте мне знать; если в этом примере недостаточно

+0

Какие СУБД вы используете? MySQL, SQL-Server, Oracle и т. Д.? – Barmar

ответ

1

В MySQL:

SELECT e.appcode, p.phasename, p.objective, m.minobjectivo 
FROM extract AS e 
JOIN phases AS p ON e.phase = p.phasename 
JOIN (SELECT e1.appcode, MIN(p1.objective) as minobjectivo 
     FROM extract AS e1 
     JOIN phases AS p1 ON e1.phase = p1.phasename 
     GROUP BY e1.appcode) AS m 
    ON e.appcode = m.appcode 

Это начинается как обычное соединением между extract и phases, чтобы получить первые 3 колонки. Затем вы пишете подзапрос, который получает минимальную цель для каждого приложения и присоединяется к этому, чтобы получить дополнительный столбец.

DEMO

Вот еще один способ написать это:

SELECT e.appcode, p.phasename, p.objective, MIN(p1.objective) AS minobjectivo 
FROM extract AS e 
JOIN phases AS p ON e.phase = p.phasename 
JOIN extract AS e1 ON e1.appcode = e.appcode 
JOIN phases AS p1 ON e1.phase = p1.phasename 
GROUP BY e.appcode, p.phasename 

Это похоже, но дополнительные объединений выполняются в основном запросе вместо подзапроса.

DEMO

+0

Спасибо, Barmar, я попробовал бы это и возвращайся к тебе !!! –

+0

BarMar, вы знаете, почему с редактором SQL MsAccess 2010 не работает ???? .... Сообщение об ошибке «Синтаксическая ошибка в предложении FROM» –

+0

Не знаю, я не использую Access. – Barmar

1

Это в основном join, но с завихрением. Большинство баз данных поддерживают оконные функции, и они будут делать то, что вы хотите:

select e.appcode, p.phasename, p.objective, 
     min(p.objective) over (partition by e.appcode) as minObjetivo 
from extract e join 
    phases p 
    on e.phase = p.phasename; 
+0

Спасибо, Гордон; его работоспособность, и я также использую Ms Access 2010; знаете ли вы правильный код SQL ?; когда я пытался использовать этот, не работает ... Сообщение об ошибке: «Отсутствует оператор в выражении запроса min (p.objective) over (partition by e.appcode)» –

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