Sql 如何编写从多个表中获取多行数量总和的查询?

Sql 如何编写从多个表中获取多行数量总和的查询?,sql,sql-server,Sql,Sql Server,我想写一个查询,为我带来今天的销售额。我在数据库中使用了4个表 第一个名为Druges的表包含药物名称 第二个调用的输出包含销售id和日期 第三个表名为outputdetails,其中包含在特定销售中销售的药物 第四个表名为inputdetails,其中包含进入商店的药品及其有效期 一种药物可能有多行,每个有效期不同,我想得到今天销售的每种药物的数量总和 这里是我正在使用的查询,但它给了我错误的号码: select DrugID, Drugs.Name, sum(

我想写一个查询,为我带来今天的销售额。我在数据库中使用了4个表

  • 第一个名为Druges的表包含药物名称
  • 第二个调用的输出包含销售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;

一天的销售额来源于列表中的表2和表3

输出它包含销售id和日期

outputdetails包含在特定销售中销售的药物

但您尚未在这些表中标识足够的列,无法生成完整的查询

Select ...
From Output
inner join OutputDetails on OutputDetails.OutputID = Output.ID
Group by ...
您也可以在查询中包含第一个表“药品”,但我们仍然不知道足够的信息


在您下面的第一条评论之后,如果您确实需要将销售和库存信息合并到一个结果中,则需要分别汇总销售和库存,然后将它们与药品表中的常见信息合并您的问题中的表格没有足够的详细信息,因此以下内容仅供参考。必须有某种方式将药物明确地连接到销售数据(即,它不能是药物和输出之间的交叉连接)


如果您的结构不太奇怪,或者您的销售价格与进货的药品装运有关,我不明白您为什么要将
输入详细信息.数量
相加,而不是
输出详细信息.数量
。当您将OutputDetails描述为“特定销售中销售的药物”时,这应该是您的目标。InputDetails将是再供应,这可能等于也可能不等于销售金额(例如:Vicodin以瓶装30粒或更多的药丸的形式提供。牙医的处方通常为7粒、14粒或21粒。您必须再订购30粒,但只会卖出较少的药丸。)此外,您将隐式联接语法与显式联接混合,在你的陈述中,这是一个交叉连接,这几乎肯定不是你想要的。为清晰起见,请始终使用显式联接。你可能想加入一个
DrugId
或者别的什么,但是可用的标准还不清楚;这可能是造成复制的主要原因。笑着的维吉尔感谢你的回答。。。。我正在使用inputdetails.Quantity,因为我想查看该药物的剩余库存量…属于Outputdetails的数量是特定销售中销售的药物数量。请了解如何“接受”和/或“向上投票”回答您的问题。一旦你得到了解决方案,不要忽视它们。通过“接受”一个答案,你会告诉每个人你已经找到了你的解决方案,通过向上投票,你会指出哪些答案是有用的。谢谢你的回复。。。你提供给我的这个查询只对一天的销售有好处,这对我来说是不够的。。。我还想把每种药物的剩余库存量都记录在inputdetails表中。再次感谢:)
我还想带上每种药物的剩余库存量
很遗憾,问题中没有说明这一点。
我想写一个查询,为我带来今天的销售额(这就是你所说的)非常感谢…很抱歉没有在这里提供关于表格的信息。它是:药品(ID,名称,价格)输入详细信息(InputID,DrugID,过期,QuantityStock)输出(ID,日期,总数)输出详细信息(OutputID,DrugID,Price,Quantity)您已经帮了我这么多,,,这是我几周前试图写的问题>非常感谢我非常感谢你
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