как обработать столбец и вернуть его как часть запроса?

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть табличная часть (No, Desc, Draw).

Я хочу вернуть список всех частей таблицы в этой форме :

 Part Number| Description | Is Packed ? (Yes/No)|
------------------------------------------------
  

В результирующем наборе заголовок Is Packed должен быть Yes, если столбец Draw не равен null, и No, если в противном случае.

Я использую PL / SQL.

Я не знаю, как это сделать.

Ответ №1:

 SELECT No AS "Part Number", Desc AS "Description", 
CASE 
WHEN Draw IS NOT NULL THEN 'Yes'
ELSE 'No'
END AS "Is Packed"
FROM Part
  

Возможно, вам потребуется экранировать Desc список полей, поскольку это зарезервированное слово.

Комментарии:

1. Если бы он действительно использовался desc в качестве имени столбца, он получил бы ORA-00904: invalid identifier при создании таблицы, но это хороший момент, чтобы упомянуть.

2. @BQ, это вполне возможно сделать, если имя столбца заключено в двойные кавычки в скрипте создания таблицы. К сожалению, я часто вижу имена объектов в двойных кавычках в сценариях, которые мы получаем от одного из наших поставщиков.

Ответ №2:

В качестве альтернативы CASE (см. Другие ответы) в этом случае вы можете использовать NVL2 :

 SELECT No AS "Part Number", Desc AS "Description", NVL2 ( DRAW, 'YES', 'NO' ) AS "Is Packed" FROM PART
  

Кстати: вам не следует создавать объект БД (таблица / столбец …) с именем, которое является зарезервированным словом (в вашем случае Desc ) — это может привести к действительно странным вещам…

Комментарии:

1. Если бы он действительно использовался desc в качестве имени столбца, он получил бы ORA-00904: invalid identifier при создании таблицы, но это хороший момент, чтобы упомянуть.

2. @BQ, это вполне возможно сделать, если имя столбца заключено в двойные кавычки в скрипте создания таблицы. К сожалению, я часто вижу имена объектов в двойных кавычках в сценариях, которые мы получаем от одного из наших поставщиков.

Ответ №3:

Используйте CASE :

 CASE WHEN Draw IS NOT NULL THEN 'Yes'
     ELSE 'No'
END AS column_alias