首页 > 解决方案 > 在 SQL Server 中使用内部联接时如何排除不相关的数据?

问题描述

我手头有两张桌子。Table_A 包含销售日期、水果类型、销售数量和总价。Table_B 包含不同类型水果在不同时间段的单价。

表_A:

Sales_Date    Fruit     Quantity  Total_Price
20200515      Apple        2          4 
20200601      Apple        4          10
20200601      Banana       4          7.2
20200606      Orange       6          7.8

表 B:

Fruit      Valid_Price_From     Valid_Price_To     Unit_Price 
Apple         20200301            20200531          2.0
Banana        20200301            20200531          1.5
Orange        20200301            20200531          1.0
Apple         20200601            20200831          2.5
Banana        20200601            20200831          1.8
Orange        20200601            20200831          1.3

我需要形成一个表格 C 将销售相关信息与单价相结合,该单价在该期间内使用此格式有效。

表 C:

Sales_Date      Fruit      Quantity     Unit_Price    Total_Price
20200515        Apple         2             2             4 
20200601        Apple         4            2.5            10
20200601        Banana        4            1.8            7.2
20200606        Orange        6            1.3            7.8

我使用的第一个查询是

select A.Sales_Date, A.Fruit, A.Quantity, B.Unit_Price, A.Total Price
from table_A A 
inner join
table_B B on A.Fruit=B.Fruit

但是在加入这两个表时出现错误。

我猜这是因为Unit Price每种水果有两种类型(在不同时期有效)。然后,我尝试Sales_DateValid_Price_FromValid_Price_To

我使用的第二个查询是:

select A.Sales_Date, A.Fruit, A.Quantity, B.Unit_Price, A.Total Price
from table_A A 
inner join
table_B B on A.Fruit=B.Fruit
where A.Sales_Date > B.Valid_Price_From and A.Sales_Date < B.Valid_Price_To

但它也不能正常工作。

我可以知道我应该如何构建我的内部连接查询以获得所需的输出,如表 C 所示?

标签: sqlsql-servertsql

解决方案


您的查询中的日期比较不正确:

select A.Sales_Date, A.Fruit, A.Quantity, B.Unit_Price, A.Total_Price
from table_A A inner join
     table_B B
     on A.Fruit = B.Fruit and
        A.Sales_Date >= B.Valid_Price_From and 
        A.Sales_Date <= B.Valid_Price_To;

换句话说,您没有包括开始日期和结束日期,但您的数据模型表明您确实希望包括它们。

如果您担心过滤掉不匹配的行——那么,您可能需要修复您的数据。但是您可以继续使用left join而不是inner join.


推荐阅读