连接两个表并从SQL Server中的结果表中计算除法SUM

时间:2014-11-07 15:41:23

标签: sql sql-server sql-server-2008

我有一个看起来像这样的表:

+---------------+---------------+-----------+-------+------+
| 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 |
|            |              |              |          |              |
+------------+--------------+--------------+----------+--------------+

因此,我们的想法是按表格中的日期对它们进行排序,因为Table2值仅在AnnDate的变化时发生变化,我们使用表2中的相同值填充结果表。

之后我想通过结果表并使用以下内容创建另一个(Final table)。

日期:2010年1月1日。采取最后4个AnnDates(因此它将是1.8.2010。和2010年3月20日。2010年10月30日。2009年11月15日)和那些AnnDate的Table2值。对这4个值进行求和,然后将Table1值除以该SUM。

所以我们会得到类似的东西:

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

有什么办法可以做到吗?

编辑:

嗯现在我看到我真的没有做好解释。 我想说的是 我尝试这样的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行,这意味着对于table2中的每个AnnDate,它返回table1中的所有Date。

我想要的是使用Table1中的日期返回2620个值 来自该日期的table1的值和来自table2的值,以响应该日期

f.e。 表1:

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

表2

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

结果表:

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

1 个答案:

答案 0 :(得分: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;