отображать несколько записей столбцов в одном столбце в Oracle - PullRequest
0 голосов
/ 28 июня 2018

У меня есть таблица со следующими столбцами в Oracle;

ID     NIC      NTN      MBL       NAME
---------------------------------------
1    1234512                       ABC
2               321                XYZ
3                         5421     POI
4    541245     624 

Мне нужно отобразить как это в запросе выбора

ID   NIC/NTN/MBL      NAME
1    1234512          ABC
2    321              XYZ
3    5421             POI
4    541245                // taking first value

Я пытался сделать с

SELECT
A.ID,
"CNIC/NTN/MBL"
A.NAME,
A.REASON
B.NAME
FROM TABLEA A
INNER JOIN TABLEB B ON A.R_ID = B.R_ID
 UNPIVOT INCLUDE NULLS
      (
        CNIC/NTN/MBL FOR cols IN (A.NIC, A.NTN, A.MBL)
      )

но не в состоянии сделать.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вам нужна функция COALESCE (которая просто возвращает первое ненулевое значение в указанных входах, читая слева направо), например так:

WITH your_table AS (SELECT 1 ID, 1234512 nic, NULL ntn, NULL mbl, 'ABC' NAME FROM dual UNION ALL
                    SELECT 2 ID, NULL nic, 321 ntn, NULL mbl, 'ABC' NAME FROM dual UNION ALL
                    SELECT 3 ID, NULL nic, NULL ntn, 5421 mbl, 'ABC' NAME FROM dual UNION ALL
                    SELECT 4 ID, 541245 nic, 624 ntn, NULL mbl, 'ABC' NAME FROM dual)
SELECT ID, 
       COALESCE(nic, ntn, mbl) nic_ntn_mbl,
       NAME
FROM   your_table;

        ID NIC_NTN_MBL NAME
---------- ----------- ----
         1     1234512 ABC
         2         321 ABC
         3        5421 ABC
         4      541245 ABC
0 голосов
/ 28 июня 2018

Использование COALESCE:

SELECT
    ID,
    COALESCE(NIC, NTN, MBL) AS "NIC/NTN/MBL",
    NAME
FROM yourTable;

Это должно работать, потому что при вызове COALESCE выше я перечисляю три столбца слева направо, и значение first non NULL будет сохранено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...