2

我正在尝试做一个需要的家庭作业问题。

--5. CALCULATE THE TOTAL QUANTITY ON HAND FOR EACH INVENTORY IT IN THE INVENTORY
--TABLE-IGNORE THIER DIFFERNT SIZES AND COLORS

这是我带来的查询。我看起来不错,除了 qoh 值

SELECT DISTINCT(item.item_id),item.item_desc,
(SELECT SUM(inv_qoh) FROM INVENTORY WHERE i.item_id = item.item_id)
FROM ITEM item INNER JOIN INVENTORY i ON i.item_id = item.item_id;

每行返回 3143 而不是该特定 item_id 的值。

     5 Children's Beachcomber Sandals                                                         3143 
     7 Girl's Soccer Tee                                                                      3143 
     4 Women's Fleece Pullover                                                                3143 
     6 Boy's Surf Shorts                                                                      3143 
     1 Men's Expedition Parka                                                                 3143 
     3 Women's Hiking Shorts                                                                  3143 
     2 3-Season Tent                                                                          3143 
4

2 回答 2

3

看起来你想使用这样的东西。它将sum()聚合和 a应用于列表GROUP BY中的其余两个字段SELECT

SELECT item.item_id, 
    item.item_desc,
    SUM(i.inv_qoh) TotalInventory
FROM ITEM item 
INNER JOIN INVENTORY i 
    ON item.item_id = i.item_id
GROUP BY item.item_id, item.item_desc;
于 2012-11-27T15:46:06.757 回答
1

您正在以一种迂回的方式执行此操作,但如果您进行以下更正,它应该可以工作:


看看你的 select 子句中的子查询:

SELECT SUM(inv_qoh) FROM INVENTORY WHERE i.item_id = item.item_id

您在 where 子句中使用了别名iitem但它们都不对应于您从中选择的表。要更正此问题,您需要为该表添加第三个别名并引用它:

SELECT SUM(inv_qoh) FROM INVENTORY i2 WHERE i2.item_id = item.item_id

此时您可能会注意到,您实际上并没有使用inventory外部 SQL 语句中的任何内容,因此您可以将其全部删除(这也可以让您消除distinct.


也就是说,@bluefeet 的回答应该以更有效的方式为您提供相同的结果。

于 2012-11-27T15:46:53.220 回答