2013-10-01 2 views
0

У меня есть 3 таблицы (JM, JCD и JEO). JM является родителем с PK JobNo. JCD и JEO являются детьми для JM с JobNo от FK.Как объединить данные из нескольких таблиц в одну главную таблицу с использованием sql

Ниже требуемый выход таблица из 3 таблиц Я пишу запрос для (извините о страшном форматирование - это не позволит мне размещать изображения пока :()

JM

JobNo 
------  
13088 
13100 

JCD

JobNo CostType Amount 
----------------------------  
13088 10 100 
13088 10 105 
13088 23 120 
13088 24 130 
13088 25 140 
13088 26 50 
13088 90 50 
13100 25 5 
13100 90 10 

Jeo

JobNo CostType Estimate 
-------------------------------------  
13088 10 50 
13088 11 60 
13088 24 10 
13088 30 100 
13100 25 310 

ВЫВОД

JobNo CostType Amount Estimate 
------------------------------------ 
13088 10  100 0     
13088 10 105 0     
13088 23 120 0     
13088 24 130 0     
13088 25 140 0     
13088 26 50 0     
13088 10 0 50     
13088 11 0 60     
13088 24 0 10     
13088 30 0 100     
13100 25 5 0     
13100 25 0 310     

Любые идеи о том, что код будет для достижения этой цели?

(Обратите внимание, что результирующая таблица не содержит строк, где JCD.CostType равен 90).

Я пытался что-то вроде этого, но он не работает :(

SELECT JM.JobNo, JCD.CostType, JCD.Amount, JEO.Estimate 
FROM JM 
FULL OUTER JOIN JCD ON JM.JobNo = JCD.JobNo 
FULL OUTER JOIN JEO ON JM.JobNo = JEO.JobNo 
WHERE JCD.CostType != 90 
GROUP BY JM.JobNo, JCD.CostType, JCD.Amount, JEO.Estimate 
+0

Вы можете использовать UNION и выбрать как по отдельности. – iiro

+0

могли бы вы показать мне, как? Я довольно новичок в sql. – user2834719

+0

Наверное, не так важно для этого вопроса, но вы должны указать, какие СУБД (Postgres, Oracle, ...) вы используете –

ответ

0

Попробуйте

SELECT 
    JM.JobNo, JCD.CostType, JCD.Amount, 0 as Estimate 
FROM 
    JM, JCD 
WHERE 
    JCD.CostType != 90 AND JM.JobNo = JDC.JobNo 
GROUP BY 
    JM.JobNo, JCD.CostType, JCD.Amount 

UNION ALL 

SELECT 
    JM.JobNo, JCD.CostType, 0 as Amount, JEO.Estimate 
FROM 
    JM, JEO 
WHERE 
    JM.JobNo = JEO.JobNo 
GROUP BY 
    JM.JobNo, JCD.CostType, JCD.Estimate 
ORDER BY 
JM.JobNo 
+0

. Спасибо. – user2834719

+0

@ user2834719 good! будет принимать этот ответ, когда вы h достаточно очков. – iiro

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