使用嵌套表选择省略重复值

时间:2015-04-04 14:19:13

标签: sql firebird firebird2.5

我有两张桌子。

T1

--------------------------
|IDT1|DESCR     |  VALUE |
--------------------------
|   1|TEST 1    |     100|
|   2|TEST 2    |      80|
--------------------------

T2

-----------
|IDT2|IDT1|
-----------
|   1|   1|
|   2|   1|
|   3|   2|
-----------

字段T2.IDT1是T1.IDT1的外键 我需要省略T1表(仅)的重复值,就像下面结果中的第二行一样。

----------------------------
|IDT1|DESCR   |IDT2|  VALUE|
----------------------------
|   1|TEST 1  |   1|    100|
|    |        |   2|       |
|   2|TEST 2  |   3|     80|
----------------------------

我正在使用firebird 2.5。

1 个答案:

答案 0 :(得分:0)

我不熟悉firebird,但如果这是一个Oracle DB,你可以试试这个:

select
  t1.idt1,
  t1.descr,
  t2.idt2,
  t1.value
from (
  select
    t2.idt2 idt2,
    case
      when lag(t2.idt1) over (order by t2.idt1, t2.idt2) = t2.idt1 theN null
      else t2.idt1
    end idt1
  from t2
) t2
left outer join t1
  on t1.idt1 = t2.idt1
order by 3;

您可以在此处测试:SQL Fiddle