10

作为一名网络开发人员,我知道如何在多种语言中使用 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; 
4

2 回答 2

25

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在查询中使用 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 回答