SQL数据将列转换为行值

时间:2015-03-17 03:29:11

标签: sql oracle

我有一个只有一列的表,大约有100行唯一的名称。但是我需要连续显示3个名字。这样我每行会得到34行,有3个名字。

示例:

Name
_____

Raj
Sam
Guru
Tej
Avin
Sami
Fanst

我需要将上述数据显示为

Name Name1 Name2
____ _____ ______
Raj  Sam    Guru
Tej  Avin   Sami
Fanst

没有条件只需要将单列值转换为3列数据。

Oracle DB

2 个答案:

答案 0 :(得分:2)

您可以使用条件聚合和rownum执行此操作。像这样:

select max(case when mod(rn, 3) = 1 then name end) as name1,
       max(case when mod(rn, 3) = 2 then name end) as name2,
       max(case when mod(rn, 3) = 0 then name end) as name3       
from (select name, rownum as rn
      from table t
     ) t
group by trunc((rn - 1) / 3);

答案 1 :(得分:0)

您可以使用CASE执行此操作,请使用PIVOT

进行尝试

尝试PIVOT这样的Name

SELECT Name,Name1,Name2
FROM
(SELECT Name FROM table_name) AS SourceTable
PIVOT
(
FOR Name IN (Name,Name1,Name2)
) AS PivotTable;