在一对多关系中返回(一个有价值的,另一个为空)

时间:2012-09-14 17:15:06

标签: sql join

我有两张这样的表:

    ---------        - -----------
    - X - Y -        - X - VALUE -
    ---------        - -----------
    -x1 - y1-        - x1- value1-     
    -x2 - y2-        - x1- value2-     
    -x3 - y3-        - x2- value3-     
    ---------        - x3- value4-
                     - x3- value5-
                     - x3- value6-
                     -------------

我希望像这样加入他们:

    -----------------
    - X - Y - VALUE -
    -----------------
    -x1 - y1- value1-
    -   -   - value2-
    -x2 - y2- value3-
    -x3 - y3- value4-
    -   -   - value5-
    -   -   - value6-
    -----------------

我不想复制X值。

任何人都可以显示此查询或参考somebodys示例吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您似乎试图在第一次出现后删除X,Y值。您可以使用row_number()函数对大多数数据库执行此操作。我正在调用第一个表XY和第二个表X

select (case when seqnum = 1 then x end) as x,
       (case when seqnum = 1 then y end) as y,
       value
from (select xy.*, x.value,
             row_number() over (partition by xy.x order by xy.value) as seqnum
      from X join
           XY
           on x.x = xy.x
order by x, y