通过案例联盟查询

时间:2014-09-02 11:52:41

标签: sql oracle oracle10g

我的数据看起来像这样

ID   Source Destination FLAG

1    A      B           Y

2    C      D           N

结果数据基于以下逻辑

如果FLAG =' Y'然后结果查询将有两行,其中源和目标列交换,否则只有一行

ID   Source Destination FLAG

1    A      B            Y

1    B      A            Y

2    C      D            N

2 个答案:

答案 0 :(得分:3)

我认为你今年秋天不需要case,只需更改标志为'Y'的来源和目的地,并将其添加到{{1}过滤的原始表格中}}

id

答案 1 :(得分:1)

混杂列应该是非常容易的任务,它应该工作。但是,如果您仍然坚持使用案例,那么:

SQL> WITH data
  2       AS (SELECT 1   id,
  3                  'A' source,
  4                  'B' destination,
  5                  'Y' flag
  6           FROM   dual
  7           UNION ALL
  8           SELECT 2   id,
  9                  'C' source,
 10                  'D' destination,
 11                  'N' FLAG
 12           FROM   dual)
 13  SELECT *
 14  FROM  (SELECT id,
 15                source,
 16                destination,
 17                flag
 18         FROM   data
 19         UNION ALL
 20         SELECT id,
 21                CASE
 22                  WHEN flag = 'Y' THEN destination
 23                END AS "source",
 24                CASE
 25                  WHEN flag = 'Y' THEN source
 26                END AS "destination",
 27                flag
 28         FROM   data)
 29  WHERE  source IS NOT NULL
 30         AND destination IS NOT NULL
 31  ORDER  BY id
 32
SQL> /

结果:

        ID S D F
---------- - - -
         1 A B Y
         1 B A Y
         2 C D N