2016-06-28 3 views
0

Я немного новичок в PL/SQL, и я не уверен, что лучший подход - сравнить данные из одной таблицы.SQL - Сравнение данных из одной таблицы

Итак, есть таблица, в которой хранятся пользовательские настройки, но не у всех пользователей одинаковые настройки. Лучше я покажу это в фрагменте примера:

User Setting Value   
---- ------- ----- 
Carol Timezone GMT 
Carol PageSize 300 
Greg Timezone EST 
Greg PageSize 300 
Greg Duration 10 
Bill PageSize 250 
Bill Duration 20 
Fred Timezone 30 
... ...  ... 

Допустим, есть тысячи пользователей. Я хочу как-то сравнить ценности между Кэрол, Грегом и Биллом, но не хочу включать других (Фред и т. Д.).

Возможно ли, чтобы таблица выглядела примерно так?

Setting Carol Greg Bill 
------- ----- ----- ---- 
Timezone GMT  EST  (null) 
PageSize 300  300  250 
Duration (null) 10  20 
+0

Вы упоминаете пл/SLQ, вы должны добавить оракула тег. И оракул может делать своды. Посмотрите здесь http://sql-plsql-de.blogspot.de/2007/08/kreuztabellen-in-oracle11g-sql-pivot.html – Turo

ответ

1
select setting, 
     max(case when user = 'Carol' then value else null end) as Carol, 
     max(case when user = 'Greg' then value else null end) as Greg, 
     max(case when user = 'Bill' then value else null end) as Bill 
from your_table 
WHERE user IN ('Carol','Greg','Bill') 
group by setting 
+1

Если есть тысячи пользователей, это может принести пользу производительности, чтобы также включить оператор where? ГДЕ пользователь IN («Кэрол», «Грег», «Билл»). Я знаю, что это зависит и от других факторов, а просто от мысли. – Matt

+0

Спасибо, Юрген Д, это сработало чудесно! – Mirth

Смежные вопросы