2015-08-02 4 views
0

Интересно, если кто-то поможет мне объединить данные из двух таблиц ... проводить весь день не удался ...SQL объединить данные из двух таблиц

Code 1 выбирает: Год | Оборот1 | Количество1 | EurPerOrder1

SELECT Year(table1.ContractDate) AS Year, 
    Sum(table1.TPrice) AS Turnover1, 
    Count(table1.id) AS Quantity1, 
    ROUND(Sum(table1.TPrice)/Count(table1.id), 0) AS EurPerOrder1 
FROM table1 
GROUP BY Year(table1.ContractDate) * 100 
ORDER BY table1.ContractDate DESC   

Кодекса2 выбирает: Год | Оборот2 | Quantiry2 | EurPerOrder2

SELECT Year(table2.date) AS Year, 
    Sum(table2.price) AS Turnover2, 
    Count(table2.rid) AS Quantiry2, 
    ROUND(Sum(table2.price)/Count(table2.rid), 0) AS EurPerOrder2 
FROM table2 
GROUP BY Year(table2.date) * 100 
ORDER BY table2.date DESC 

И мне нужно, чтобы объединить данные, такие как:

года | Оборот1 | Количество1 | EurPerOrder1 | Оборот2 | Quantiry2 | EurPerOrder2

Мне нужно иметь все данные из обеих таблиц, сгруппированных по годам. Даже table2 не имеет 2013 года в любом случае, я бы хотел, чтобы он показывал 0 или пусто ... Я пробовал разные способы использования примеров, но ничего не работал, поэтому я думаю, что проблема может возникнуть, потому что вторая таблица не имеет всех лет, которые находятся на таблице1 ...

+0

Какая у вас СУБД? Также вам нужно только совместить строки 'YEAR' или также все строки из таблицы1? –

+0

Просто обновите вопрос, чтобы мы знали, будете ли вы использовать левое или внутреннее соединение. Хорошее объяснение можно найти здесь (http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-joins) –

+0

Что такое 'EurPerOrder3'? –

ответ

0

Первое: вы можете прочитать довольно хорошее объяснение о JOINShere

хорошо, согласно вопрос, что нужно LEFT JOIN. Это означает, что все данные от table1 и только соответствующие данные от table2.

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

SELECT Year(table1.ContractDate) AS Year, 
    Sum(table1.TPrice) AS Turnover1, 
    Count(table1.id) AS Quantiry1, 
    ROUND(Sum(table1.TPrice)/Count(table1.id), 0) AS EurPerOrder1, 
    Sum(table2.price) AS Turnover2, 
    Count(table2.rid) AS Quantiry2, 
    ROUND(Sum(table2.price)/Count(table2.rid), 0) AS EurPerOrder2 
FROM 
    table1 t1 
    LEFT JOIN table2 t2 ON Year(table1.ContractDate) = Year(table2.date) 
GROUP BY 
    Year(table1.ContractDate) * 100, Year(table2.date) * 100 
ORDER BY 
    table1.ContractDate DESC, table2.date DESC 

Конечно, вы должны обработать NULL значения. См. link

Пожалуйста, проверьте SQL и исправьте его, если есть идентификаторы. У меня нет живых данных для проверки (запустив его).

+0

Спасибо большое! Я не уверен, что мне нужно поднять соединение, но мне нужно будет иметь все данные из обеих таблиц, сгруппированных по годам. Даже table2 не имеет 2013 года в любом случае, я бы хотел, чтобы он показывал 0 или пусто ... – tester

+0

Хорошо, @tester, если ответ решает вашу проблему, пожалуйста, не забудьте его одобрить. И когда у вас есть репутация, вы можете проголосовать. Также вам нужно изучить «JOINs», это фундаментальная тема в SQL. –

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