如何编写从多个表中获取多行数量总和的查询?
Posted
技术标签:
【中文标题】如何编写从多个表中获取多行数量总和的查询?【英文标题】:How to write a query that get the sum of quantity of multiple rows from multiple tables? 【发布时间】: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 的数量是药物的数量在特定的销售中出售。
请了解如何“接受”和/或“投票”回答您的问题。一旦你得到你的解决方案,不要只是忽略它们。通过“接受”一个答案,您可以告知每个人您已经找到了您的解决方案,并通过点赞您指出哪些答案是有帮助的。
【参考方案1】:
一天的销售额来自您列表中的表 2 和表 3
输出它包含销售 id 和日期
outputdetails 包含在特定销售中销售的药物
但是您没有在这些表中确定足够的列来构建完整的查询。
Select ...
From Output
inner join OutputDetails on OutputDetails.OutputID = Output.ID
Group by ...
您还可以在查询中包含第一个表“drugs”,但我们还不够了解。
在您在下面的第一条评论之后,如果您确实需要将销售和库存信息合并到一个结果中,您需要分别汇总销售额和库存,然后将它们加入到药物表中的常见信息中。 您的问题中的表格没有足够的详细信息,因此以下内容仅供参考。必须有某种方法将药物显式连接到销售数据(即药物和输出之间不能是交叉连接)。
SELECT
Drugs.ID
, Drugs.Name
, r.Stock
, s.sales
FROM Drugs
LEFT JOIN (
SELECT
DrugID
, SUM(InputDetails.Quantity) AS 'Stock'
FROM InputDetails
GROUP BY
DrugID
) r ON Drugs.ID = r.DrugID
LEFT JOIN (
SELECT
output.DrugID
, SUM(OutputDetails.Quantity) AS 'Sales'
FROM Output
INNER JOIN OutputDetails ON OutputDetails.OutputID = Output.ID
GROUP BY
output.DrugID
) o ON Drugs.ID = o.DrugID
【讨论】:
谢谢您的回复...您提供给我的这个查询只适合在一天内带来销售额,这对我来说还不够...我还想将每种药物剩余数量带入表中输入明细中的库存。再次感谢你:)want also to bring each drug remaining quantity in stock
可惜问题中没有说明。
I want to write a query that bring me the sales for today.
(就是你说的)
非常感谢...抱歉,这里没有提供有关表格的信息:药物(ID、名称、价格) InputDetails(InputID,DrugID,Expiry,QuantityStock) Output(ID,Date ,Total) OutputDetails(OutputID,DrugID,Price,Quantity)
Used_By_Already 你真的帮了我这么多,,,这是我几周前试图写的查询>非常感谢我非常感谢你以上是关于如何编写从多个表中获取多行数量总和的查询?的主要内容,如果未能解决你的问题,请参考以下文章