我在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来做到这一点?然后我会在我看来循环它。
答案 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 |
答案 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