как делать SELECT двух различных полей той же таблицы в единственной колонне в Oracle 11g?

В хороший день, я делаю консультацию он нуждался в том, чтобы реализовать select 2 полей той же таблицы, но внутри единственной колонны колонна, а именно

SELECT desc_equipo, serialnro, serialmac from producto

desc_equipo он давайте говорить поле, которое хранит имя или описание продукта, в зависимости от команды, какие-то у них есть serialnro, но они не имеют serialmac, другие у них есть serialmac, но они не имеют serialnro, тогда то, что они просят меня, чтобы делать, состоит в том, чтобы помещать все данные, serialnro и serialmac в единственной колонне. Я попытался нескольких форм, но меня бьют козырем все.

Есть способ решать это сомнение?

Спасибо заранее

Lo que tengo

1
задан 07.11.2016, 18:08
3 ответа

Принимая, что serialnro и serialmac они того же типа, и что только у одного из 2 есть стоимость, которая не null одновременно, тогда ты можешь использовать coalesce чтобы возвращать стоимость, которая не в null:

select desc_equipo,
       coalesce(serialnro, serialmac) as serial
  from product

Редактирование

то есть иногда те, которые используют систему, оставляют место в мишени

Жаль, что ты считаешь место перемешанным с null чтобы представлять несуществующую стоимость. Но если это случай, ты можешь исправлять консультацию посредством одного trim добавочный, что конвертирует пустое место в null, для того, чтобы coalesce функционируйте правильно:

select desc_equipo,
       coalesce(trim(serialnro), serialmac) as serial
  from product
3
ответ дан 24.11.2019, 12:43
  • 1
    Modifiqu и # 233; ответ, чтобы манипулировать местом. – sstan 07.11.2016, 18:13
  • 2
    спасибо, функция и # 243; – GioV 07.11.2016, 18:18

Я чувствую, что структура твоей таблицы - неправильная, если у всех продуктов есть сериал, но одни nro и другие состоят mac, тогда beberГ-эксперт в том, чтобы иметь колонну для сериала и другой колонны, чтобы показывать, ли он mro или mac, твои колонны были бы:

SERIAL VARCHAR2
SERIAL_TYPE VARCHAR2

и podrГ-схвати добавлять constraint к колонне Сериала Type для того, чтобы только он принял стоимость, что ты определил

ALTER TABLE PRODUCT ADD
CONSTRAINT PRODUCT_SERIAL_TYPE_CHK CHECK (PRODUCT_SERIAL IN ('MAC','NRO'))

, Таким образом ты удалил бы твои проблемы с местом в мишени и недействительные, любое сомнение я в твои Гіrdenes.

типов Привета!

2
ответ дан 24.11.2019, 12:43
  • 1
    мы это предложили, но у начальников есть Ваш способ манипулировать базой данных, serialnro они это используют для декодеров и serialmac для модемов, я не понимаю из-за qu и # 233; они это не помещают в то же поле, если он не будет затрагивать операции, м и # 225; s довольно преданная, чтобы программировать консультации. – GioV 07.11.2016, 19:12

Также ты можешь использовать:

SELECT desc_equipo, TRIM(NVL(serialnro, ' ') || ' ' || NVL(serialmac, ' ')) AS serial
  FROM producto

В случае, если в реестре будут существовать оба, они окажутся приложенными.

1
ответ дан 24.11.2019, 12:43
  • 1
    nvl(columna, '') он избыточный. У Oracle нет концепции цепи vac и # 237; в. Эта превращается автоматически в null. Так что nvl следовать и # 237; в в null. – sstan 07.11.2016, 18:16
  • 2
    @sstan и #161; Ах! Верный. – Paul Vargas 07.11.2016, 18:19

Теги

Похожие вопросы