2016-05-20 11 views
-2

私は、17の異なる場所にわたる在庫を確認する必要がある次のコードを持っています。私が下にあるコードは、5つの場所だけですが、動作します。同じ結果を得るために使用できるよりクリーンで効率的なコードがあるかどうかを調べる。より効率的なコード

SELECT DISTINCT imitmidx_sql.item_no, imitmidx_sql.item_desc_1, imitmidx_sql.item_desc_2, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_1 WHERE (loc = '1') AND (item_no = imitmidx_sql.item_no)) AS Loc1, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_2 WHERE (loc = '2') AND (item_no = imitmidx_sql.item_no)) AS Loc2, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_3 WHERE (loc = '3') AND (item_no = imitmidx_sql.item_no)) AS Loc3, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_4 WHERE (loc = '4') AND (item_no = imitmidx_sql.item_no)) AS Loc4, 
(SELECT qty_on_hand FROM iminvloc_sql AS IMINVLOC_SQL_5 WHERE (loc = '5') AND (item_no = imitmidx_sql.item_no)) AS Loc5 
FROM iminvloc_sql INNER JOIN imitmidx_sql ON iminvloc_sql.item_no = imitmidx_sql.item_no 
+0

あなたも、エイリアスを使用していないのに、なぜあなたはLOCN年代にあなたのテーブル名をエイリアシングしていますか? – Dresden

答えて

0

方法について:

select 
    imitmidx_sql.item_no, 
    imitmidx_sql.item_desc_1, 
    imitmidx_sql.item_desc_2, 
    itm_loc_qty.* 

    from iminvloc_sql 

pivot (SUM(qty_on_hand) for loc in ([1],[2],[3],[4],[5])) as itm_loc_qty -- Add here as necessary 

join imitmidx_sql 
on itm_loc_qty.item_no = imitmidx_sql.item_no 
+0

Opのコードは基本的に結果をピボットします。 'iminvloc_sql'に関連する***行***が5つある場合、相関サブクエリはこれらを5 ***フィールド***として出力します。あなたのクエリは、ピボットを行っていない5行を保持します。 – MatBailie

関連する問題