2016-10-01 16 views
0
If I have 2 tables: 

table1-QITEM 
ITEMNAME        QTYONHAND 
--------------------------------------------- 
boots-snakeproof      100 
camel saddle       100 
compass        100 
elephant polo stick     100 
exploring in 10 easy lessons   100 
geo positioning system    100 
hammock        100 
hat-polar explorer     100 
how to win foreign friends   100 
map case        100 
map measure       100 
pith helmet       100 
pocket knife-avon      100 
pocket knife-nile      100 
safari chair       100 
safari cooking kit     100 
sextant        100 
stetson        100 
tent-2 person       100 
tent-8 person       100 


table2-QDEL 
DELNO  DELQTY ITEMNAME       SPL 
------------------------------------------------------- 
51  50  pocket knife-nile    102 
52  10  pocket knife-nile    105 
53  10  pocket knife-nile    105 
54  10  pocket knife-nile    105 
55  10  pocket knife-nile    105 
56  10  pocket knife-nile    105 
57  50  compass       101 
58  10  geo positioning system   101 
59  10  map measure      101 
60  25  map case       101 
61  2  sextant       101 
62  1  sextant       105 
63  20  compass       103 
64  1  geo positioning system   103 
65  15  map measure      103 
66  1  sextant       103 
67  5  sextant       102 
68  3  sextant       104 
69  5  boots-snakeproof     105 
70  15  pith helmet      105 
71  1  pith helmet      101 
72  1  pith helmet      102 
73  1  pith helmet      103 
74  1  pith helmet      104 
75  5  pith helmet      105 
76  5  pith helmet      105 
77  5  pith helmet      105 
78  5  pith helmet      105 
79  5  pith helmet      105 
80  10  pocket knife-nile    102 
81  1  compass       102 
82  1  geo positioning system   102 
83  10  map measure      102 
84  5  map case       102 
85  5  compass       102 
86  5  pocket knife-avon    102 
87  5  tent-2 person     102 
88  2  tent-8 person     102 
89  5  exploring in 10 easy lessons  102 
90  5  how to win foreign friends  102 
91  10  exploring in 10 easy lessons  102 
92  10  how to win foreign friends  102 
93  2  exploring in 10 easy lessons  102 
94  2  how to win foreign friends  102 
95  5  compass       105 
96  2  boots-snakeproof     105 
97  20  pith helmet      106 
98  20  pocket knife-nile    106 
99  1  sextant       106 
100  3  hat-polar explorer    105 
101  3  stetson       105 

QDELの購入/販売でQITEMを更新しようとしています。 SPL = 102または105の場合の購入です。したがって、 spl = 102または105という数量を追加します。その後、spl =何か他の場合は数量を減算します。 QDELからDELQTYの金額を加算または減算し、それをQITEMのQTYONHANDに入れます。 私のコードは動作しません。私はOracle Developer btwを使用しています。オラクルのケースステートメント

update QITEM i 
set i.QtyOnHand = (select case when x.SPLNO = 101 then i.QtyOnHand -  x.DELQTY 
         when x.SPLNO = 102 then i.QtyOnHand + x.DELQTY 
         when x.SPLNO = 103 then i.QtyOnHand - x.DELQTY 
         when x.SPLNO = 104 then i.QtyOnHand - x.DELQTY 
         when x.SPLNO = 105 then i.QtyOnHand + x.DELQTY 
          else i.QtyOnHand - x.DELQTY end 
       from QDEL x 
       where x.ITEMNAME = i.ITEMNAME); 

1行の副問い合わせが複数の行を返すとエラーが表示されます。誰かが私が間違っていることを教えてもらえますか? QITEM内のすべての行については

+0

サブクエリは、QDELの各行に対して1つの計算を行い、1行につき1つの結果を返します。あなたはカッコ内にCASE式があるSUM(....)が必要です。詳細については、あなたの投稿を編集し、データベースのタグだけを保存してください(SQL ServerとOracleの両方を同時に使用しない限り)。 – mathguy

+0

ですので、ケース(合計(ケース.....))が必要になりますか? – lawtonhself

+0

私は 'sql server'タグを削除しましたが、これはOracleデータベースであることがわかっているので意図的なものではないと思います。 – sstan

答えて

0

、あなたのサブクエリはQtyOnHand列を更新する単一値を返す必要があります。あなたのサブクエリは現在、与えられたitemnameの複数の値を返します。たぶんあなたは何とかあなたのためにある種のループを魔法のように実行すると予想していたかもしれませんが、それはうまくいかないでしょう。

コメントに示唆されているように、sum集計関数を使用して、サブクエリから単一の値を取得する必要があります。

update qitem i 
    set i.QtyOnHand = 
      i.QtyOnHand + (select coalesce(sum(x.delqty * case when x.splno in (102, 105) then 1 else -1 end), 0) 
          from qdel x 
          where x.itemname = i.itemname) 
+0

1は-1が何のために使われていますか? – lawtonhself

+0

'delqty'を乗算すると、値が正または負になります。これは実際には' QtyOnHand'に値を加算または減算する別の方法です。 – sstan

+0

また、私はそれをそのまま実行すると、まだnull値を取得しています。 101,103,104と106の代わりに、-1の代わりに特定のケースを追加する必要がありますか? – lawtonhself