0

私はSQLを初めて使用します。申し訳ありませんが、これはかなり基本的なものかもしれません。

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

Group と Entity の両方が null でない場合は、Entity を選択します。したがって、望ましい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 に挿入する方法。ありがとう!

4

2 に答える 2

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と呼ばないでください。GROUP は SQL ワードです。

于 2013-11-14T17:49:57.527 に答える
0

DECODE関数はここで役立ちます。EntityIS 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 名 分類 パーセンテージ 期間               
---------- ---- -------------- ---------- ------------ --------
         1 BBB エンティティ 99% ロング                 
         2 DDD エンティティ 99% ショート                
         3 EEE グループ 99% ロング                 
         4 FFF エンティティ 99% ショート

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

于 2013-11-14T16:52:55.337 に答える