代码之家  ›  专栏  ›  技术社区  ›  havmaage

配置单元sql从具有优先级条件的表中选择

  •  0
  • havmaage  · 技术社区  · 7 年前

    我想选择 name nametype 从一个名为 names ,但优先考虑 名称类型

    table names
    
    name        nametype    address    id
    simon           01       xx         1
    simon           02       xx         2 
    simon           03       xx         3 
    karen           01       xx         4
    william         03       xx         5 
    william         01       xx         6
    william         02       xx         7
    

    其中一个 =01或02或03,按该排序顺序。 名称类型 =01,其他2行不应为

    如何在sql中实现这一点,我需要了解如何标记已选择的名称。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    如果您只需要具有 01 ,然后使用 where :

    select t.*
    from t
    where t.nametype = '01';
    

    nametype (这似乎是您问题的意图),然后使用窗口函数和 哪里 . 一种方法使用 min()

    select t.*
    from (select t.*, min(t.nametype) over (partition by name) as min_nametype
          from t
         ) t
    where nametype = min_nametype;
    
        2
  •  0
  •   havmaage    7 年前

    我自己用coalesce解决了这个问题

    pseudocode:
    
    if nametypes = OECD207
         select row
     elseif nametypes = OECD203
         select row
     elseif nametypes =OECD204
         select row
    end if
    

    OECD207 OECD204 ...

    select
    navn
    , coalesce(OECD207, OECD203, OECD204, ...) as nametype 
    from
    (
    select
    navn
    , max(case when nametype = "OECD207" then nametype else null end) as OECD207
    , max(case when nametype = "OECD203" then nametype else null end) as OECD203
    , max(case when nametype = "OECD204" then nametype else null end) as OECD204
    ...
    from ...
    group by
    navn
    )