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

时间:2017-09-25 22:06:36

标签: sql sql-server

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

  • 第一张名为药物的药物名称
  • 第二个名为Output,它包含销售ID和日期
  • 第三个名为outputdetails的表,其中包含在特定销售中销售的药物。
  • 第四个名为inputdetails的表,其中包含输入到商店的药物及其到期日期

对于一种药物,可能是多行,每个有效期不同,我想得到今天出售的每种药物的数量总和。

这里是我正在使用的查询,但它给了我错误的数字:

Select TOP 1* from tblAssignment
   group by SkillNeeded 
            having SkillNeeded <= 4
                  order by desc;

1 个答案:

答案 0 :(得分:1)

一天的销售额来自清单

中的表2和表3

输出它包含销售ID和日期

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

但是您没有在这些表中找到足够的列来启用完整的查询。

Select ...
From Output
inner join OutputDetails on OutputDetails.OutputID = Output.ID
Group by ...

你还可以包括第一张表&#34; drug&#34;在查询中,但我们还不知道。

在您下面的第一条评论之后,如果您确实需要将销售和库存信息合并到一个结果中,您需要单独汇总销售和库存,然后将这些信息加入药品表中的常见信息。 您的问题中的表格没有足够的详细信息,因此以下仅作为指南提供。必须有一些方法明确地将药物加入销售数据(即它不能是药物和产出之间的交叉联接)。

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