2014-11-07 2 views
0

У меня есть одна таблица, которая выглядит следующим образом:Объединение двух таблиц и вычисления разделяй SUM из результирующей таблицы в SQL Server

+---------------+---------------+-----------+-------+------+ 
| id_instrument | id_data_label | Date | Value | Note | 
+---------------+---------------+-----------+-------+------+ 
|    1 |   57 | 1.10.2010 | 200 | NULL | 
|    1 |   57 | 2.10.2010 | 190 | NULL | 
|    1 |   57 | 3.10.2010 | 202 | NULL | 
|    |    |   |  |  | 
+---------------+---------------+-----------+-------+------+ 

, а другой, который выглядит следующим образом:

+----------------+---------------+---------------+--------------+-------+-----------+------+ 
| id_fundamental | id_instrument | id_data_label | quarter_code | value | AnnDate | Note | 
+----------------+---------------+---------------+--------------+-------+-----------+------+ 
|    1 |    1 |   20 |  20101 | 3  | 28.2.2010 | NULL | 
|    2 |    1 |   20 |  20102 | 4  | 1.8.2010 | NULL | 
|    3 |    1 |   20 |  20103 | 5  | 2.11.2010 | NULL | 
|    |    |    |    |  |   |  | 
+----------------+---------------+---------------+--------------+-------+-----------+------+ 

Что Я хотел бы сделать это, чтобы объединить/соединить эти две таблицы в один таким образом, что я получаю что-то вроде этого:

+------------+--------------+--------------+----------+--------------+ 
| Date | Table1.Value | Table2.Value | AnnDate | quarter_code | 
+------------+--------------+--------------+----------+--------------+ 
| 1.10.2010. |   200 |   3 | 1.8.2010 |  20102 | 
| 2.10.2010. |   190 |   3 | 1.8.2010 |  20102 | 
| 3.10.2010. |   202 |   3 | 1.8.2010 |  20102 | 
|   |    |    |   |    | 
+------------+--------------+--------------+----------+--------------+ 

So Среда IDE a - упорядочить их по дате из таблицы 1, а так как Table2 Значения изменяются только при изменении AnnDate, мы заполняем таблицу Resulting теми же значениями из таблицы2.

После этого я хотел бы пройти результирующую таблицу и создать другую (итоговую таблицу) со следующим.

Дата 1.10.2010. возьмите последние 4 месяца (таким образом, это будет 1,8.2010 г. и т. д. 20.3.2010. 30.1.2010. 15.11.2009) и значения Table2 на тех AnnDate. Сделайте SUM из этих 4 значений, а затем разделите значение Table1 с этим SUM.

Таким образом, мы получили бы что-то вроде:

+-----------+---------------------------------------------------------------+ 
| Date |       FinalValue       | 
+-----------+---------------------------------------------------------------+ 
| 1.10.2010 | 200/(Table2.Value on 1.8.2010+Table2.Value on 20.3.2010 +...) | 
|   |                | 
+-----------+---------------------------------------------------------------+ 

Есть ли способ, это может быть сделано?

EDIT:

Хм да теперь я вижу, что я на самом деле не сделал хорошую работу, объясняя это. То, что я хотел сказать, я стараюсь INNER JOIN, как это:

SELECT TableOne.Date, TableOne.Value, TableTwo.Value, TableTwo.AnnDate, TableTwo.quarter_code 
FROM TableOne 
INNER JOIN TableTwo ON TableOne.id_intrument=TableTwo.id_instrument WHERE TableOne.id_data_label = somevalue AND TableTwo.id_data_label = somevalue AND date > xxx AND date < yyy 

И это внутреннее соединение возвращает 2620 * 40 строк, что означает для каждого AnnDate из table2 возвращает всю Дату от table1.

То, что я хочу, чтобы вернуть 2620 значения с датами из Table1 значений из table1 на эту дату и ценности из table2, которые отвечают на этот период дат

F.E. Table1:

+-------+-------+ 
| Date | Value | 
+-------+-------+ 
|  1 | a  | 
|  2 | b  | 
|  3 | c  | 
|  4 | d  | 
+-------+-------+ 

Table2

+-------+---------+ 
| Value | AnnDate | 
+-------+---------+ 
| x  |  1 | 
| y  |  4 | 
+-------+---------+ 

Результирующая таблица:

+-------+---------+---------+ 
| Date | ValueT1 | ValueT2 | 
+-------+---------+---------+ 
|  1 | a  | x  | 
|  2 | b  | x  | 
|  3 | c  | x  | 
|  4 | d  | y  | 
+-------+---------+---------+ 
+0

Не совсем ясно, как вы соединяетесь с таблицей 1 и таблицей 2 вместе, чтобы получить промежуточную таблицу (одну с 5 колонами). –

+0

Хорошо, дайте мне попробовать и очистите его. Я хотел бы присоединиться к ним так, чтобы первый столбец результирующей таблицы был Date from Table1. Второй столбец - значение из таблицы2, а столбец thrid - значение из таблицы 3. Проблема состоит в том, что таблица1 имеет 2620 строк, а таблица2 имеет 40 строк. значения в таблице 2 изменяются только в AnnDate. Итак, я хочу, чтобы в итоговой таблице было 2620 строк с значениями table1 и значениями из таблицы2, которые должны быть заполнены для дат, где нет изменений с последним значением. Я не знаю, сумели ли вы меня понять. Сожалею. –

+0

Второй столбец - значение из таблицы2, а столбец thrid - значение из таблицы3? Где Table3? –

ответ

0

Вы должны JOIN заявление для первого запроса. Попытайтесь:

SELECT TableOne.Date, TableOne.Value, TableTwo.Value, TableTwo.AnnDate, TableTwo.quarter_code FROM TableOne 
INNER JOIN TableTwo 
ON TableOne.id_intrument=TableTwo.id_instrument; 
+0

Я уже пробовал это. Я не получаю то, что хочу. Я получаю Date fixed fixed и Table1.Values ​​исправлено, а Table2.Values ​​меняются, чего не должно быть. –

+0

Можете ли вы задать в своем вопросе, что произойдет, когда вы попробовали этот запрос? – ryekayo

+0

Так что я на самом деле сделал это: ВЫБРАТЬ TableOne.Date, TableOne.Value, TableTwo.Value, TableTwo.AnnDate, TableTwo.quarter_code ИЗ TableOne INNER JOIN TableTwo ON TableOne.id_intrument = TableTwo.id_instrument WHERE TableOne.id_data_label = somevalue AND TableTwo.id_data_label = somevalue AND date> xxx AND date