2016-06-28 87 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

你提到的PL/SLQ,你应该添加了Oracle标签。而且oracle可以做枢轴。看看这里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('Carol','Greg','Bill')我知道这也取决于其他因素,但只是一个想法。 – Matt

+0

谢谢Juergen D,这个工作非常好! – Mirth