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

时间:2018-05-22 05:49:04

标签: mysql sql laravel

我在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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

一种简单的方法是

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

这是可能的,并且会产生相同的结果,但实际上并不是必需的。 UNION构造中的列名称将由第一个select语句确定。

答案 2 :(得分:1)

我认为简单的联盟应该有所帮助:

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