2015-02-18 3 views
0

Я был в тупике по этому поводу и был бы признателен за любую помощь.запрос таблицы пар ключ-значение с условными обозначениями

Вот структура таблицы:

+----+-------------+-------------------+--+ 
| id | name  |  value  | | 
+----+-------------+-------------------+--+ 
| 3 | email  | [email protected] | | 
| 3 | device_type | iOS    | | 
| 3 | text  | purchase   | | 
| 4 | email  | [email protected] | | 
| 4 | device_type | iOS    | | 
| 5 | email  | [email protected] | | 
| 5 | device_type | Android   | | 
| 5 | text  | where can i pur | | 
+----+-------------+-------------------+--+ 

Я хотел бы результат, который выглядит следующим образом:

╔════╦══════╦═════════════════╦══╦══╗ 
║ id ║ name ║  value  ║ ║ ║ 
╠════╬══════╬═════════════════╬══╬══╣ 
║ 3 ║ text ║ purchase  ║ ║ ║ 
║ 4 ║ text ║ Null   ║ ║ ║ 
║ 5 ║ text ║ where can i pur ║ ║ ║ 
╚════╩══════╩═════════════════╩══╩══╝ 

Из-за структуры данных в K/V пар, I У меня возникли проблемы с поиском правильной логики для захвата уникального идентификатора, а затем строки, где имя = текст вместе со значением текста. Когда строка с текстом названия не отображается для идентификатора, я хотел бы сохранить этот идентификатор, но показать, что он не существует.

+0

благодаря @JustinCave я заново отредактированные записи из текста в текст, чтобы избежать путаницы. – tchoedak

ответ

2

SQL Fiddle

select id, 'text', min(decode(name, 'text',value)) 
    from table1 
group by id 
order by 1 

Results:

| ID | 'TEXT' | MIN(DECODE(NAME,'TEXT',VALUE)) | 
|----|--------|--------------------------------| 
| 3 | text |      purchase | 
| 4 | text |       (null) | 
| 5 | text |    where can i pur | 
0

Один из вариантов был бы таким. Я получаю разные значения идентификатора из таблицы в предложении WITH, а затем снова присоединяюсь к таблице, чтобы получить данные.

WITH distinct_ids 
    AS(SELECT DISTINCT id 
     FROM your_table) 
SELECT ids.id, 
     nvl(tbl.name,'text'), 
     tbl.value 
    FROM distinct_ids ids 
     LEFT OUTER JOIN your_table tbl 
     ON( ids.id = tbl.id 
      AND tbl.name = 'text') 
Смежные вопросы