作为一名Web开发人员,我知道如何在多种语言中使用IF ELSE。但是,我正在学习如何使用TOAD for Oracle编写报告。
我的问题是,如何正确添加IF ELSE声明?
这就是我想要做的。 错误是:命令未正确结束。
(VIKKIE和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;
答案 0 :(得分:20)
IF
是一个PL / SQL结构。如果您正在执行查询,则使用的是SQL而不是PL / 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
吗?人们经常随意抛出它,或者在缺少连接条件时添加它,而不是考虑是否确实需要做额外的工作来识别和删除重复项。
答案 1 :(得分: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