【问题标题】:How to get a row of unique values from prior row followed by nulls till the next value?如何从前一行获取一行唯一值,然后是空值直到下一个值?
【发布时间】:2019-12-08 08:23:17
【问题描述】:

我有一个包含多个连接和字段的查询。我有一排有很多重复项。我只需要从该特定行获取 distict 值,同时由于其他连接而使查询的大小保持不变。

我尝试过 group by 和 districts,但它们消除了查询中的其他关键信息。我需要保持查询长度不变。

示例:(伪代码)

SELECT
 Name
,StateID
,Age
,Toy
,ManufactureName
From
 peopleTable as people
 LEFT JOIN toyTable on people.id = toytable.id
 LEFT JOIN ManufactureTable on toyTable.toyId=ManufactureTable.ManId
WHERE
 toytable.id >1000

输出

Name   StateID Age  Toy    Manufacture
Carlo  1       10   Woody  Disney
Sid    1       10   Buzz   Disney
Abby   1       10   Car    RaceMan     
Bobby  4       10   Doll   Barbie
Sally  6       10   Book   Barns&
Jim    6       10   Woody  Disney

预期输出

Name   StateID Age  Toy    Manufacture NewField
Carlo  1       10   Woody  Disney      1
Sid    1       10   Buzz   Disney      NULL
Abby   1       10   Car    RaceMan     NULL
Bobby  4       10   Doll   Barbie      4
Sally  6       10   Book   Barns&      6
Jim    6       10   Woody  Disney      Null

【问题讨论】:

  • 请包括每个表的主键。

标签: sql oracle duplicates distinct-values


【解决方案1】:

这样的东西会有帮助吗?

使用ROW_NUMBER 分析函数,找出一组共享相同stateid 的第一行。请注意,我使用了order by null,因为我不知道哪个是第一个(name 不是,agetoymanufacture 也不是)。如果您不在乎,请保持原样。如果您知道如何对它们进行排序,请使用该列。

SQL> with test (name, stateid, age, toy, manufacture) as
  2    (select 'Carlo', 1, 10, 'Woody', 'Disney'  from dual union all
  3     select 'Sid'  , 1, 10, 'Buzz' , 'Disney'  from dual union all
  4     select 'Abby' , 1, 10, 'Car'  , 'RaceMan' from dual union all
  5     select 'Bobby', 4, 10, 'Doll' , 'Barbie'  from dual union all
  6     select 'Sally', 6, 10, 'Book' , 'Barns&'  from dual union all
  7     select 'Jim'  , 6, 10, 'Woody', 'Disney'  from dual
  8    )
  9  select name, stateid, age, toy, manufacture,
 10    case when row_number() over (partition by stateid order by null) = 1 then stateid
 11         else null
 12    end new_field
 13  from test;

NAME     STATEID        AGE TOY   MANUFAC  NEW_FIELD
----- ---------- ---------- ----- ------- ----------
Carlo          1         10 Woody Disney           1
Sid            1         10 Buzz  Disney
Abby           1         10 Car   RaceMan
Bobby          4         10 Doll  Barbie           4
Sally          6         10 Book  Barns&           6
Jim            6         10 Woody Disney

6 rows selected.

SQL>

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2019-05-26
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多