Скрыть столбцы, если все значения равны нулю или нулю

Цель, которую я пытаюсь достичь, — скрыть столбец, если все его значения имеют значение null или null.

  CREATE TABLE m_value_tbl  (net_value, net_con,total_net) AS 
  SELECT   cast(NULL as number), cast(0 as number), cast(NULL as number) FROM DUAL 
  UNION ALL
  SELECT   cast(NULL as number),  cast(2 as number), cast(NULL as number) FROM DUAL ;

Ожидаемый результат:

            net_value net_con   total_net
             null      2            null

Я попробовал следующее:

       SELECT
          net_value
         ,net_con
         ,TOTAL_NET
      from m_value_tbl
       where
      (net_value IS NOT NULL
      OR net_con IS NOT NULL
      OR total_net IS NOT NULL)

Чтобы полностью скрыть весь столбец из набора результатов, потребуется использовать динамический SQL... это невозможно сделать, просто используя синтаксис запроса. Обычно это то, что вы обрабатываете на уровне представления.

Tim Biegeleisen 05.08.2024 11:08

Можете ли вы дать мне более подробную информацию об этом? Тим Бигелайзен

Bob 05.08.2024 11:10

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

Thorsten Kettner 05.08.2024 12:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не можете сделать это с помощью SQL.

Если вы хотите скрыть столбцы, это следует сделать на языке программирования, с которого вы вызываете базу данных (например, Java, PHP, C#, Python и т. д.), например SQL (на любом диалекте, а не только Oracle) и клиентских приложениях. которые передают SQL-запросы в базу данных (SQL*Plus, SQL Developer, TOAD и т. д.), не поддерживают условное отображение столбцов на основе результатов.


Если вы хотите сделать это с помощью PL/SQL, то что-то вроде:

DECLARE
  v_cur SYS_REFCURSOR;
  v_cnt PLS_INTEGER;
BEGIN
  SELECT COUNT(total_net) INTO v_cnt FROM m_value_tbl;

  IF v_cnt > 0 THEN
    OPEN v_cur FOR
      SELECT net_value, net_con, total_net FROM m_value_tbl;
  ELSE
    OPEN v_cur FOR
      SELECT net_value, net_con FROM m_value_tbl;
  END IF;

  DBMS_SQL.RETURN_RESULT(v_cur);
END;
/
Ответ принят как подходящий

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

В вашем запросе вы выбираете все строки, в которых хотя бы один из столбцов не равен нулю (используя OR):

WHERE net_value IS NOT NULL
   OR net_con   IS NOT NULL
   OR total_net IS NOT NULL

Вместо этого вам нужно, чтобы все столбцы соответствовали вашему условию (с помощью AND), т. е.:

WHERE net_value IS NOT NULL
  AND net_con   IS NOT NULL
  AND total_net IS NOT NULL

Поскольку ваше условие состоит в том, что все столбцы не должны быть ни нулевыми, ни нулевыми, вы можете использовать WHERE .. IS NOT NULL AND .. <> 0, который можно упростить до WHERE .. <> 0, поскольку NULL никогда не может быть равным или неравным значению.

SELECT
  net_value,
  net_con,
  total_net
FROM m_value_tbl    
WHERE net_value <> 0
  AND net_con   <> 0
  AND total_net <> 0;

Другие вопросы по теме