Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 加入2个表格-填写缺失的日期_Sql_Sql Server 2008_Left Join_Inner Join - Fatal编程技术网

Sql 加入2个表格-填写缺失的日期

Sql 加入2个表格-填写缺失的日期,sql,sql-server-2008,left-join,inner-join,Sql,Sql Server 2008,Left Join,Inner Join,我在连接两个表和精确过滤数据时遇到问题。如果需要,我可以稍微修改表格。我正在运行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 | 1234

我在连接两个表和精确过滤数据时遇到问题。如果需要,我可以稍微修改表格。我正在运行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
等等

每个基金都有自己的系统代码

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

我的目标是找出客户在某一天持有多少股份以及每股价格

如果我只是在(tableA.System\u Code=tableB.System\u 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
如果我将两个表连接在一起,其中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
正如你所看到的,除了最后两行,它几乎是完美的

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

希望我能清楚地表达我的观点。蒂亚

您的最终查询应该如下所示:

select *
 from A
  left join B
  on (A.System_Code = B.System_Code)
 where B.Date >= A.Purchase
试试这个:

SELECT a.*
    ,b.*
FROM dbo.Table_A a
JOIN table_b b ON b.System_Code = a.System_Code
WHERE b.DATE >= a.Purchase_Date

EXCEPT

SELECT a.System_Code
    ,a.NAME
    ,a.Client_ID
    ,a.Fund
    ,a.Purchase_Date
    ,a.Shares
    ,b.System_Code
    ,a2.Purchase_Date AS DATE
    ,b.Price
FROM dbo.Table_A a
JOIN TABLE_a a2 ON a.System_Code = a2.System_Code
    AND a.Purchase_Date < a2.Purchase_Date
JOIN table_b b ON b.System_Code = a.System_Code
选择一个*
,b*
来自dbo.Table_A
在b.System\u代码=a.System\u代码上联接表
其中b.DATE>=a.Purchase\u日期
除了
选择一个系统代码
,a.姓名
,a.Client_ID
,a.基金
,a.购买日期
,a股
,b.系统代码
,a2.购买日期为日期
,b.价格
来自dbo.Table_A
在a.System_代码=a2.System_代码上连接表a a2
a.购买日期
那是行不通的。如问题中所述,如果我简单地指定B.Date>=A.Purchase的位置,它会创建重复条目。您的观点非常清楚!你能摆弄一下测试数据吗?