【发布时间】:2017-09-25 22:06:35
【问题描述】:
我想编写一个查询,为我带来今天的销售额。我在数据库中使用了 4 个表。
- 第一个名为 drug 的表包含药物名称
- 第二个称为输出,它包含销售 ID 和日期
- 名为 outputdetails 的第三个表包含在特定销售中销售的药物。
- 名为 inputdetails 的第四个表包含进入商店的药品及其有效期
一种药物可能有多行,每个有效期都不同,我想得到今天销售的每种药物的数量总和。
这里是我正在使用的查询,但它给了我错误的数字:
select DrugID,
Drugs.Name,
sum(InputDetails.Quantity) as 'Quantity'
from InputDetails
inner join Drugs on Drugs.ID = InputDetails.DrugID
cross join Output
inner join OutputDetails on OutputDetails.OutputID = Output.ID
group by DrugID, Name;
【问题讨论】:
-
我们可以查看示例数据以进行处理
-
除非你的结构有点奇怪,或者你的销售价格与传入的药物出货量相关,否则我看不出你为什么要对
InputDetails.Quantity而不是OutputDetails.Quantity求和。当您将 OutputDetails 描述为“在特定销售中销售的药物”时,这应该是您的目标。 InputDetails 将是补给,可能等于也可能不等于销售量(例如:Vicodin 以每瓶 30 粒或更多药丸的形式提供。牙医的处方通常是 7、14 或 21 粒药丸。您必须订购另外 30 个,但只会卖出更少的数量。) -
此外,您将隐式连接语法与显式连接混合在一起,在您的语句中显示为交叉连接,这几乎肯定不是您想要的。为清楚起见,始终使用显式连接。您可能想加入
DrugId或其他什么,但可用的标准尚不清楚;这可能是重复的主要驱动因素。 -
Laughing Vergil 感谢您的回复....我使用 inputdetails.Quantity 是因为我想查看该药物的剩余库存数量...属于 Outputdetails 的数量是药物的数量在特定的销售中出售。
-
请了解如何“接受”和/或“投票”回答您的问题。一旦你得到你的解决方案,不要只是忽略它们。通过“接受”一个答案,您可以告知每个人您已经找到了您的解决方案,并通过点赞您指出哪些答案是有帮助的。
标签: sql sql-server