【发布时间】:2016-08-24 19:42:36
【问题描述】:
我在连接 2 个表和精确过滤数据时遇到问题。如果需要,我可以稍微修改表格。我正在运行 Microsoft SQL Server 2008。
Table A
System_Code | Name | Client ID| Fund | Purchase_Date | Shares
1 | Lily | 123456 | 001 | 02/21/2016 | 100
1 | Lily | 123456 | 001 | 02/26/2016 | 200
2 | Lily | 123456 | 002 | 02/24/2016 | 250
等等
每个基金都有自己的 System_Code
Table B
System_Code | Date | Price
1 | 02/21/2016 | 10
1 | 02/22/2016 | 10
1 | 02/23/2016 | 9
1 | 02/24/2016 | 10
1 | 02/25/2016 | 11
1 | 02/26/2016 | 10.5
等等
我的目标是找出客户在特定日期持有多少股份以及每股价格。
如果我只是加入 2 个表 ON (tableA.System_Code = tableB.System_Code),我会得到:
System_Code| Name | Client ID| Fund |Purchase_Date|Shares| Date | Price
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/21/2016| 10
1 | Lily | 123456 | 001 |02/26/2016 |200 |02/26/2016| 10.5
如果我将 2 个表连接在一起 WHERE tableB.Date >= tableA.Purchase
System_Code| Name | Client ID| Fund |Purchase_Date|Shares| Date | Price
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/21/2016| 10
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/22/2016| 10
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/23/2016| 9
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/24/2016| 10
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/25/2016| 11
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/26/2016| 10.5
1 | Lily | 123456 | 001 |02/26/2016 |200 |02/26/2016| 10.5
如您所见,除了最后 2 行之外,它几乎是完美的
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/26/2016| 10.5
1 | Lily | 123456 | 001 |02/26/2016 |200 |02/26/2016| 10.5
由于在 2016 年 2 月 26 日进行了购买,因此购买日期为 2016 年 2 月 21 日的第一行应该会下降。期望的结果是:
System_Code| Name | Client ID| Fund |Purchase_Date|Shares| Date | Price
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/21/2016| 10
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/22/2016| 10
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/23/2016| 9
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/24/2016| 10
1 | Lily | 123456 | 001 |02/21/2016 |100 |02/25/2016| 11
1 | Lily | 123456 | 001 |02/26/2016 |200 |02/26/2016| 10.5
希望我能清楚地表达我的观点。蒂亚!
【问题讨论】:
-
您的观点非常明确!你能用测试数据做一个 sqlFiddle 吗?
标签: sql sql-server-2008 left-join inner-join