-3

次の表を考えると

ITEMID  | TYPE          | QTY |
-----------------------
...
134     |TOTALINDEPOT   | 169 |
134     |UNUSED         |  70 |
134     |FAULTY         |  15 |
134     |DAMAGED        |   1 |
134     |DELAYED        | 100 |
...

ID 134 の利用可能なアイテムの数量を取得する効率的な方法は何ですか (遅延タイプのアイテムを除く)? 結果は 83 => (169-(70+15+1)) です。で実装しましたが(SELECT qty FROM tableA WHERE type='TOTALINDEPOT' AND itemid='134') - (SELECT SUM(qty) ... WHERE TYPE IN ('UNUSED', 'FAULTY', 'DAMAGED')) AND itemid='134'、もっとエレガントなものを探しています。

4

3 に答える 3

2

このような?

SELECT a.ITEMID,
    (SELECT SUM(QTY) FROM tbl WHERE TYPE = 'TOTAL' AND ITEMID = a.ITEMID) -
    (SELECT SUM(QTY) FROM tbl WHERE TYPE <> 'TOTAL' AND ITEMID = a.ITEMID) AS available
FROM tbl a
GROUP BY a.ITEMID

結果

| | アイテムID | 利用可能 |
----------------------
| | 134 | 83 |

デモを見る

于 2013-04-12T21:34:54.873 に答える
0

それはあなたのために働くでしょうか?

SELECT a.total1 - a.total2
FROM 
(
  SELECT SUM(CASE WHEN type='total' THEN qty ELSE 0 END) as total1,
  SUM(CASE WHEN type<>'total' THEN qty ELSE 0 END) as total2
  FROM table WHERE itemid = 134
)a
于 2013-04-12T21:38:29.853 に答える
0

もう1つの方法:

SELECT SUM(QTY) - 
       SUM(CASE WHEN [TYPE] IN ('UNUSED', 'FAULTY', 'DAMAGED') THEN QTY END) AS TotalSum
FROM TABLE1

デモ:

于 2013-04-12T21:39:02.810 に答える