我想知道是否还有将具有多个值的列分成不同的列。这是我想要做的一个例子: 假设我有如下表1:
Team | Value_descriptor| Value
Team1| Coach | McGuire
Team1| Manager | Thompson
Team1| City | Detroit
Team2| Coach | Johnson
Team2| Manager | Stevenson
Team2| City | LA
我想制作如下表格:
Team | Coach | Manager | City
Team1| McGuire | Thompson| Detroit
Team2| Johnson | Stevenson| LA
...
假设我先制作第二张桌子。是否有可以从第一个表中返回第二个表中的值的查询?
答案 0 :(得分:2)
以下是一种方法,可以使用聚合中使用case
表达式的任何数据库。
select t1.Team,
max(case when t1.Value_Descriptor = 'Coach' then t1.Value end) as Coach,
max(case when t1.Value_Descriptor = 'Manager' then t1.Value end) as Manager,
max(case when t1.Value_Descriptor = 'City' then t1.Value end) as City
from table1 t1
group by t1.Team
或者,您的数据库可能会提供一些特定的语法来为您进行旋转。
答案 1 :(得分:0)
这里在Oracle DB中测试了 PIVOT 的答案
select * from tst
pivot (max(Value) for (Value_descriptor) in (
'City' as "CITY",
'Manager' as "MANAGER",
'Coach' as "COACH"))
;
TEAM CITY MANAGER COACH
--------------- --------------- --------------- ---------------
Team2 LA Stevenson Johnson
Team1 Detroit Thompson McGuire
请注意,如果特定 value_descriptor 的值更多,则上述查询会选择MAX值(按字母顺序排列)。
如果要显示连接的所有值,请使用 listagg
替换聚合函数 pivot (listagg(Value,', ') within group (order by value) for (Value_descriptor) in (