Как сравнить значение между двумя столбцами в одной строке, если отличается, то создать другую строку? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть следующая таблица в MySQL:

id | item_id | uom | uom1
1    1         kg    box

Когда я выбираю все из таблицы, она отображает одну строку.

Я хочу, чтобы она отображала две строки, еслиuom и uom1 различаются.

Например, поле uom = kg и uom1 = тогда результат будет отображать

id | item_id | uom
1    1         kg
2    1         box

, если uom и uom1 одинаковы (кг), то только одна строкапокажет

id | item_id | uom
1    1         kg

Возможно ли это сделать с помощью sql?Тогда я просто сделаю это на мой взгляд.

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Один простой способ сделать это будет

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.

0 голосов
/ 22 мая 2018

Я думаю, что простой союз должен помочь здесь:

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

0 голосов
/ 22 мая 2018
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...