10

Web開発者として、私はIFELSEを複数の言語で使用する方法を知っています。ただし、TOADforOracleを使用してレポートを作成する方法を学習しています。

私の質問は、IF ELSEステートメントを適切に追加するにはどうすればよいですか?

これが私がやろうとしていることです。エラーは次のとおりです。コマンドが正しく終了していません。

(VIKKIE to ICKYは、私が学ぶのを助けるために私のスーパーバイザーから私に任命されました)

SELECT DISTINCT a.item, b.salesman, NVL(a.manufacturer,'Not Set')Manufacturer

FROM inv_items a, arv_sales b
WHERE   a.co = '100'
      AND a.co = b.co
      AND A.ITEM_KEY = b.item_key   
--AND item IN ('BX4C', 'BX8C', 'BX866') --AND salesman ='15'
AND a.item LIKE 'BX%'
AND b.salesman in ('01','15')
AND trans_date BETWEEN to_date('010113','mmddrr')
                         and to_date('011713','mmddrr')


GROUP BY a.item, b.salesman, a.manufacturer
ORDER BY a.item

IF  b.salesman = 'VIKKIE' THEN
a.salesman := 'ICKY';
END IF; 
4

2 に答える 2

25

IFPL/SQL構造です。クエリを実行している場合は、PL/SQL ではなく SQL を使用しています。

CASESQLでは、クエリ自体でステートメントを使用できます

SELECT DISTINCT a.item, 
                (CASE WHEN b.salesman = 'VIKKIE'
                      THEN 'ICKY'
                      ELSE b.salesman
                  END), 
                NVL(a.manufacturer,'Not Set') Manufacturer
  FROM inv_items a, 
       arv_sales b
 WHERE  a.co = '100'
   AND a.co = b.co
   AND A.ITEM_KEY = b.item_key   
   AND a.item LIKE 'BX%'
   AND b.salesman in ('01','15')
   AND trans_date BETWEEN to_date('010113','mmddrr')
                      and to_date('011713','mmddrr')
ORDER BY a.item

集計を行っていないためGROUP BY、クエリに a は必要ありません。本当に必要DISTINCTですか? 重複を特定して削除するために余分な作業を行う必要があるかどうかを検討するのではなく、参加条件が欠落しているときに、人々はしばしばそれを無計画に投げ込んだり、追加したりします。

于 2013-01-17T19:53:17.683 に答える
5

Decode同様に使用できます:

SELECT DISTINCT a.item, decode(b.salesman,'VIKKIE','ICKY',Else),NVL(a.manufacturer,'Not Set')Manufacturer
FROM inv_items a, arv_sales b
WHERE a.co = b.co
      AND A.ITEM_KEY = b.item_key
      AND a.co = '100'
AND a.item LIKE 'BX%'
AND b.salesman in ('01','15')
AND trans_date BETWEEN to_date('010113','mmddrr')
                         and to_date('011713','mmddrr')
GROUP BY a.item, b.salesman, a.manufacturer
ORDER BY a.item
于 2013-01-17T20:14:31.660 に答える