ウェブ開発者として、IF ELSEを複数の言語で使用する方法を知っています。ただし、TOAD for Oracleを使用してレポートを作成する方法を学んでいます。
私の質問は、どうすれば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;
IF
はPL/SQL構成体です。クエリを実行している場合、PL/SQLではなくSQLを使用しています。
SQLでは、クエリ自体でCASE
ステートメントを使用できます
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
クエリで。本当にDISTINCT
が必要ですか?多くの場合、重複を特定して削除するために余分な作業を行う必要があるかどうかを考慮するのではなく、結合条件が欠落している場合にそれを無計画に投げたり追加したりします。
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