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

如何比较一行中两列之间的值,如果不同,则创建另一行?

  •  0
  • Crazy  · 技术社区  · 6 年前

    我在MySQL中有下表:

    id | item_id | uom | uom1
    1    1         kg    box
    

    当我从表中选择全部时,它将显示一行。

    如果UOM和UOM1不同,我想让它显示两行。

    例如,UOM=kg和UOM1=box,结果将显示

    id | item_id | uom
    1    1         kg
    2    1         box
    

    如果UOM和UOM1相同(kg),则只显示一行

    id | item_id | uom
    1    1         kg
    

    是否可以使用SQL来完成?然后我将在我的视图中循环它。

    3 回复  |  直到 6 年前
        1
  •  3
  •   Carsten Massmann    6 年前

    一个简单的方法是

    select id, item_id, uom from tbl union
    select id, item_id, uom1 from tbl
    

    UNION 默认情况下,将过滤掉重复的行。不需要更多的“把戏”…

    @Neeraj Wadhwa建议将第二行改为:

    select id, item_id, uom1 as uom from tbl
    

    这是可能的,并将产生相同的结果,但这并非真正必要。中的列名称 联合 构造将由第一个select语句确定。

        2
  •  3
  •   Wei Lin    6 年前
    select 
      @rownum := @rownum + 1 AS id,
      T.* 
    from (
        select  `item_id`, `uom`
        from Table1
    
        union
    
        select  `item_id`, `uom1` as `uom`
        from Table1
    ) T , (SELECT @rownum := 0) r
    

    | id | item_id | uom |
    |----|---------|-----|
    |  1 |       1 |  kg |
    |  2 |       1 | box |
    

    DEMO SQL Fiddle

        3
  •  1
  •   Vicctor    6 年前

    我认为简单的联合应该有助于:

    select distinct * from (
      select id, item, uom1 as uom from stuff
        union
      select id, item, uom2 as uom from stuff
      ) as unionised
    order by unionised.id
    

    他是小提琴手: http://sqlfiddle.com/#!9/ece687/1