#sql #oracle #name-value
#sql #Oracle #имя-значение
Вопрос:
Я пытался разобраться в этом некоторое время. У меня есть таблица, в которой есть несколько строк, содержащих пары имя-значение, тип и дату (не включены для простоты). Все они связаны идентификатором. Я хотел бы вывести все данные, относящиеся к одному и тому же идентификатору, в одной строке, отфильтрованной по типу equals document.
ВСТАВИТЬ В таблицу1 (идентификатор, имя, значение, тип) ЗНАЧЕНИЯ (111, 'направление', 'входящий', 'документ'), (111, 'filename', 'file.txt ', 'document'), (111, 'отправить', 'FOO.SND', 'документ'), (111, 'rec', 'FOO.RCV', 'document'), (111, 'несвязанный', 'несвязанный', 'бизнес'), (222, 'direction', 'inbound2', 'document'), (222, 'filename', 'file2.txt ', 'document'), (222, 'отправить', 'FOO.SND2', 'документ'), (222, 'rec', 'FOO.RCV2', 'document'), (222, 'несвязанный', 'несвязанный2', 'бизнес'), (333, 'direction', 'inbound3', 'document'), (333, 'filename', 'file3.txt ', 'document'), (333, 'отправить', 'FOO.SND3', 'документ'), (333, 'rec', 'FOO.RCV3', 'document'), (333, 'несвязанный', 'несвязанный3', 'бизнес');
То, что я хочу вывести, это:
направление идентификатора отправить rec filename 111 входящий FOO.SND FOO.RCV file.txt 222 inbound2 FOO.SND2 FOO.RCV2 file2.txt 333 inbound3 FOO.SND3 FOO.RCV3 file3.txt
Ответ №1:
Попробуйте сводный запрос:
SELECT id,
MAX(CASE WHEN name = 'direction' THEN val END) AS direction,
MAX(CASE WHEN name = 'send' THEN val END) AS send,
MAX(CASE WHEN name = 'rec' THEN val END) AS rec,
MAX(CASE WHEN name = 'filename' THEN val END) AS filename
FROM table1
GROUP BY id
Комментарии:
1. Спасибо! Это помогло подтолкнуть меня в правильном направлении.
2. Извините, поскольку у меня репутация менее 15, это записывается, но не отображается публично. Это сообщение, которое я получил при голосовании.