У меня есть схема в базе данных Oracle, доступной только для чтения, под названием MAXSCHEMA
и таблица в ней под названием WORKORDER
. В этой таблице есть столбец с названием WONUM
.
Если я использую этот оператор SQL:
SELECT *
FROM MAXSCHEMA.WORKORDER
WHERE WONUM = '101319066'
В результате я получаю следующие 3 строки:
Я хотел бы исключить столбец FAILDATE
, поскольку все записи для этой записи WONUM
в этом столбце имеют значение null.
Напротив, я бы хотел сохранить столбец PARENT
, поскольку в этом столбце есть хотя бы одно ненулевое значение.
Итак, мой желаемый результат будет:
Я понимаю, что могу просто открыто указать нужные мне столбцы:
SELECT WONUM, PARENT, STATUS
FROM MAXSCHEMA.WORKORDER
но есть ли другой способ исключить столбец FAILDATE
на основании того факта, что все записи для этого значения WONUM
имеют значение null?
Поскольку вы не можете удалить столбец из запроса во время выполнения, один из вариантов — проверить, имеет ли столбец какие-либо значения, отличные от NULL, а если нет, то исключить столбец. Сколько столбцов в этой таблице и сколько раз вы будете запускать этот запрос. Если это много раз, вы можете динамически создать запрос, включающий только ненулевые столбцы.
После того, как вы указали «*» в своем запросе, он вернет все столбцы из таблицы независимо от их значений, включая нулевые значения. Таким образом, для этой проблемы нет обходного пути, кроме явного удаления столбца из запроса.
Простой ответ: Ваша идея не имеет смысла и невозможна. Цель SQL — предоставить список столбцов, которые должен включать результат, а затем что-то сделать с этим результатом, а не наоборот.