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;

各行は、その特定のitem_idの値の代わりに3143を返します。

     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

このようなものを使用したいようです。リストの残りの 2 つのフィールドにsum()集計と aを適用します。GROUP BYSELECT

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

iエイリアスとwhere 句を使用していますitemが、どちらも選択元のテーブルに対応していません。これを修正するには、そのテーブルに 3 番目のエイリアスを追加して参照する必要があります。

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

この時点でinventory、外側の SQL ステートメントで実際には何も使用していないことに気付くかもしれません。そのため、すべてをまとめて削除できます (これにより、 を削除することもできますdistinct)。


そうは言っても、@ bluefeetの答えは、はるかに効果的な方法で同じ結果をもたらすはずです.

于 2012-11-27T15:46:53.220 に答える