SQL-запрос для получения заголовков столбцов в виде значений, основанных на значении - PullRequest
0 голосов
/ 29 октября 2018

введите описание изображения здесь У меня есть таблица с данными в формате ввода (как указано в прикрепленном изображении) в БД Oracle.

Необходимо преобразовать в формат вывода (как указано в прилагаемом изображении),

Чтобы было понятно, если значение равно '1' в столбцах XX или YY или ZZ, тогда они должны отображаться как Роль (несколько уникальных строк - см. Пример для A123) для этого идентификатора. Кроме того, если для идентификатора существует несколько значений «Код», они должны отображаться как «Коды:», разделенные запятой, как можно видеть для идентификатора C123.

Не могли бы вы помочь мне в написании запроса, чтобы получить требуемый вывод.

Прикрепленное изображение ввода-вывода (Input_Output.png), поскольку данные могут выглядеть не в правильном формате в вопросе.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Окончательный запрос, используемый для справки:

ВЫБЕРИТЕ ID, ИМЯ, Роль «XX» ОТ TABLENAME, ГДЕ XX = 1 союз
ВЫБЕРИТЕ ID, ИМЯ, Роль «YY» ИЗ TABLENAME, ГДЕ YY = 1 союз
ВЫБЕРИТЕ ID, ИМЯ, Роль 'ZZ' ИЗ TABLENAME, ГДЕ ZZ = 1 союз выберите ID, ИМЯ, Роль = 'Коды:', STUFF ((выберите отдельно ',' + код ОТ TABLENAME T1, ГДЕ T1.ID = T2.ID для пути XML ('')), 1,1, ''), роль FROM TABLENAME T2

0 голосов
/ 29 октября 2018

Я пытался написать этот запрос ниже, но у меня не было какой-либо платформы для проверки результата :), потому что я в поезде, собираюсь работать. Можете ли вы попробовать этот запрос:

SELECT ID, Name,  'XX' Role FROM yourtable WHERE XX =1 -- To exclude no XX role
union  
SELECT ID, Name, 'YY' Role FROM 
yourtable WHERE YY =1 -- To exclude no YY role
union  
SELECT ID, Name, 'ZZ' Role FROM yourtable WHERE ZZ =1 -- To exclude no ZZ role
union 
SELECT ID, Name, 'Codes: ' || LISTAGG(code, ', ') WITHIN GROUP (ORDER BY code) "Role" FROM yourtable group by ID, Name;

надеюсь, что этот CSN поможет вам.

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