首页 > 解决方案 > 在连接表中对总计进行分组和求和

问题描述

我有两张桌子药物和库存。我正在尝试从两个表中选择以下所有详细信息,但在 INVENTORY 表中也有多个具有不同 BRANCH_NO 的药物 ID 列表(INVENTORY 中的主键实际上是 BRANCH_NO,MEDICATION_ID 复合键)

我需要汇总各种药物 ID,并在一个 SELECT 命令中加入表格,并在每行末尾显示每种药物的所有信息(有 5 个)以及每种药物的总和。但是我在尝试 Group by 和 Sum 以及在某一点进行分区时变得一头雾水。请帮助我是新手。

以下是最新的非工作版本 - 但它不显示

就像我碰巧一样。

SELECT I.MEDICATION_ID,
SUM(I.STOCK_LEVEL)
FROM INVENTORY I
INNER JOIN (SELECT MEDICATION_NAME, SUBSTR(MEDICATION_DESC,1,20) "Medication Description",
MANUFACTURER, PACK_SIZE FROM MEDICATION) M ON MEDICATION_ID=I.MEDICATION_ID
GROUP BY I.MEDICATION_ID;

For the data imagine I want this sort of output:

MEDICATION_ID        MEDICATION_NAME       STOCK_LEVEL      OtherColumns.....
1                    Alpha                 10
2                    Bravo                 20
3                    Charlie               20
1                    Alpha                 30
4                    Delta                 10
5                    Echo                  20
5                    Echo                  40
2                    Bravo                 10

grouping and totalling into this:

MEDICATION_ID        MEDICATION_NAME       STOCK_LEVEL      OtherColumns.....
1                    Alpha                 40
2                    Bravo                 30
3                    Charlie               20
4                    Delta                 10
5                    Echo                  60                  

当它只有一个表时,我可以得到这个,但是当我尝试加入表并选择一些东西时,它只是不起作用。

提前谢谢各位。我很欣赏这可能是一个简单的解决方案,但它将有很大的帮助。

标签: sqloraclegroup-by

解决方案


您需要将所有非聚合列显式写入SELECTGROUP BY列表中(顺便说一句,无需使用嵌套查询,如果是这种情况,MEDICATION_ID则其中缺少列):

SELECT I.MEDICATION_ID, M.MEDICATION_NAME, SUM(I.STOCK_LEVEL) AS STOCK_LEVEL,
       SUBSTR(M.MEDICATION_DESC,1,20) "Medication Description", M.MANUFACTURER, M.PACK_SIZE
  FROM INVENTORY I
  JOIN MEDICATION M ON M.MEDICATION_ID = I.MEDICATION_ID
 GROUP BY I.MEDICATION_ID, M.MEDICATION_NAME, SUBSTR(M.MEDICATION_DESC,1,20),
          M.MANUFACTURER, M.PACK_SIZE;

这样,您将能够返回所有列出的列。


推荐阅读