2013-11-14 81 views
0

我是新来的sql,抱歉,这可能是非常基本的。什么是在oracle中做条件选择的最佳方式

我有表名为T1

T1 
ID Group Entity Percentage Long_Term Short_Term 
1 AAA BBB  99%  Long  
2 CCC DDD  99%     Short 
3 EEE    99%  Long 
4   FFF  99%     Short 

插入到T2

ID Name Classification Percentage Term 

如果集团和实体两种都是不为空,那么就选择实体。 所以期望T2将是:

ID Name Classification Percentage Term 
1 BBB  Entity    99  Long 
2 DDD  Entity    99  Short 
3 EEE  Group    99  Long 
4 FFF  Entity    99  Short 

如何从T1选择和插入到像T2 T2。 谢谢!

回答

0

DECODE函数将在这里帮助。我们检查Entity是否为NULL,如果是,则从Group列中获取值。我们对classification也是这样做的,但在这里我们提供了字面值作为结果。我看到你也想在Term专栏中做同样的事情?

CREATE TABLE t1 (
    id NUMBER, 
    group_val VARCHAR2(3), 
    entity VARCHAR2(3), 
    percentage VARCHAR2(4), 
    long_term VARCHAR2(20), 
    short_term VARCHAR2(20) 
); 

INSERT INTO t1 VALUES (1, 'AAA', 'BBB', '99%', 'Long', NULL); 
INSERT INTO t1 VALUES (2, 'CCC', 'DDD', '99%', NULL, 'Short'); 
INSERT INTO t1 VALUES (3, 'EEE', NULL, '99%', 'Long', NULL); 
INSERT INTO t1 VALUES (4, NULL, 'FFF', '99%', NULL, 'Short'); 

COMMIT; 

CREATE TABLE t2 AS 
    SELECT 
     id, 
     DECODE(entity, NULL, group_val, entity) AS name, 
     DECODE(entity, NULL, 'Group', 'Entity') AS classification, 
     percentage, 
     DECODE(long_term, NULL, short_term, long_term) AS term 
    FROM 
    t1; 

SELECT * FROM t2; 
  ID NAME CLASSIFICATION PERCENTAGE TERM    
---------- ---- -------------- ---------- -------------------- 
     1 BBB Entity   99%  Long     
     2 DDD Entity   99%  Short     
     3 EEE Group   99%  Long     
     4 FFF Entity   99%  Short

如果你已经有了t2表,然后:

INSERT INTO t2 
    SELECT 
     id, 
     DECODE(entity, NULL, group_val, entity) AS name, 
     DECODE(entity, NULL, 'Group', 'Entity') AS classification, 
     percentage, 
     DECODE(long_term, NULL, short_term, long_term) AS term 
    FROM 
    t1; 

检查在SQLFiddle

0

您与COALESCE(或NVL)做到这一点,一个CASE子句:

select 
    id, 
    coalesce(groupid, entity) as name, 
    case when entity is not null then 'Entity' else 'Group' end as classification, 
    percentage, 
    coalesce(long_term, short_term) as term 
from t1; 

顺便说一句:不要打电话给你的专栏组。 GROUP是一个SQL字。

相关问题