将一列中的名称移动到SQL / Oracle中的多个列

时间:2015-11-12 15:38:54

标签: sql oracle pivot

我有两条记录如下:

Id     User_name   User_id
DT122  Doe, John   123
DT122  Yum, Mi     124

如何在可以显示结果的Oracle查询中编写

Id     UserName1    Username2
DT122  Doe, John    Yum, Mi

任何反馈,想法?

1 个答案:

答案 0 :(得分:0)

以下是在sql server中执行此操作的方法。这被称为交叉表,有些人称之为条件聚合。另一种选择是使用PIVOT。我发现交叉表的语法比枢轴更少钝,它通常对性能有一点点优势。

您可以在此处详细了解此技术。 http://www.sqlservercentral.com/articles/T-SQL/63681/。或者,如果您不知道需要多少列来完成动态版本。你可以在这里阅读。 http://www.sqlservercentral.com/articles/Crosstab/65048/

create table #Something
(
    Id char(5)
    , User_name varchar(20)
    , User_id int
)

insert #Something
select 'DT122', 'Doe, John', 123 union all
select 'DT122', 'Yum, Mi', 124

select Id
    , MAX(case when RowNum = 1 then User_Name end) as UserName1
    , MAX(case when RowNum = 2 then User_Name end) as UserName2
from
(
    select ID
        , USER_NAME
        , USER_ID
        , ROW_NUMBER() over (PARTITION BY Id order by user_name) as RowNum
    from #Something
) x
group by x.Id

drop table #Something