sql - 在 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_Date
将Valid_Price_From
Valid_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 所示?
解决方案
您的查询中的日期比较不正确:
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
.
推荐阅读
- html - 在 CSS 和 HTML 中更改幻灯片中的图片大小
- c++ - 扩展的初始化列表和未初始化的成员
- c# - 如何暂时暂停实时数据图表的绘图更新
- export - 导出数据以用于 SaaS 中的分析
- model-view-controller - 使用 ORM 时在控制器上请求数据库数据是一种好习惯吗?
- python - 从元组的元组中消除重复值
- html - 在悬停时显示文本框(在表格中)
- swift - NSMutableAttributedString(Xcode)中的斜体和粗体在哪里?
- python-3.x - PyTorch 和 CUDA 驱动程序
- c# - 错误 CS0103 当前上下文中不存在名称“图像”