Исключить столбцы без данных в них - PullRequest
1 голос
/ 24 апреля 2020

Использование Oracle с TOAD.

У меня есть таблица, которая выглядит примерно так (столбцы 2 и 4 пусты, а столбцы 1, 3 и 5 содержат данные):

column_1   column_2   column_3   column_4    column_5
a1                    b1                     c1
a2                    b2                     c2
a3                    b3                     c3
a4                    b4                     c4

Я хотел бы сделать простой выбор, исключающий столбцы без данных в них (= столбцы 2 и 4) или другими словами, чтобы выбрать только столбцы, в которых есть данные. Есть ли команда выбора, такая как SELECT * FROM test_table WHERE columns ARE NOT NULL (это псевдокод только для разъяснения моей проблемы).

Результат должен выглядеть следующим образом:

column_1   column_3   column_5
a1         b1         c1
a2         b2         c2
a3         b3         c3
a4         b4         c4

1 Ответ

1 голос
/ 24 апреля 2020

Вы должны сделать трехэтапный подход, но он в значительной степени утомителен, но выполним в sqlplus

1) Сначала определите пустые столбцы

2) Определите заголовки без эти столбцы

3) определяют тело без этих столбцов

    WITH data AS
        (
               SELECT '1' a,
                      ''  b ,
                      2   c ,
                      ''  d,
                      5   e
               FROM   dual
               UNION ALL
               SELECT '7' a,
                      ''  b ,
                      2   c ,
                      ''  d,
                      6
               FROM   dual
               UNION ALL
               SELECT '3' a,
                      ''  b ,
                      3   c ,
                      ''  d,
                      7
               FROM   dual
               UNION ALL
               SELECT '4' a,
                      ''  b ,
                      3   c ,
                      ''  d,
                      8
               FROM   dual
               UNION ALL
               SELECT '5' a,
                      ''  b ,
                      2   c ,
                      ''  d,
                      9
               FROM   dual),d1 AS
        (
                 SELECT   First_value(a) ignore nulls over (PARTITION BY a ORDER BY ROWNUM) ca,
                          first_value(b) ignore nulls over (PARTITION BY b ORDER BY ROWNUM) cb,
                          first_value(c) ignore nulls over (PARTITION BY c ORDER BY ROWNUM) cc,
                          first_value(d) ignore nulls over (PARTITION BY d ORDER BY ROWNUM) cd,
                          first_value(e) ignore nulls over (PARTITION BY e ORDER BY ROWNUM) ce
                 FROM     data
                 WHERE    ROWNUM=1 ),
        d2 as (SELECT 0 rw,
               CASE
                      WHEN ca IS NOT NULL THEN 'a'
                      ELSE ''
               END
                      ||chr(9)
                      ||
               CASE
                      WHEN cb IS NOT NULL THEN 'b'
                      ELSE ''
               END
                      ||chr(9)
                      ||
               CASE
                      WHEN cc IS NOT NULL THEN 'c'
                      ELSE ''
               END
                      ||chr(9)
                      ||
               CASE
                      WHEN cd IS NOT NULL THEN 'd'
                      ELSE ''
               END
                      ||chr(9)
                      ||
               CASE
                      WHEN ce IS NOT NULL THEN 'e'
                      ELSE ''
               END as DATA1
        FROM   d1
        UNION ALL
        SELECT 
               rownum rw,
               a
                      ||chr(9)
                      ||b
                      ||chr(9)
                      ||c
                      ||chr(9)
                      ||d
                      ||chr(9)
                      ||e
        FROM   data)
        select /*ansiconsole*/ DATA1
        from d2 order by rw asc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...