动态地将行转换为列

时间:2011-03-14 15:02:56

标签: oracle10g pivot dynamic-sql

我有桌子:

name | surname | project | dates | hours
aaa aaaa 1 12.08.2011 10
aaa aaaa 1 13.08.2011 8
aaa aaaa 1 14.08.2011 7

我需要这样的结果:

name | surname | project | dates | hours | dates | hours | dates | hours | total
aaa aaaa 1 12.08.2011 10 13.08.2011 8 14.08.2011 7 25

SELECT name,surname,project
MAX(DECODE(C,1,dates)) dates,
MAX(DECODE(C,1,hours)) hours,
MAX(DECODE(C,2,dates)) dates,
MAX(DECODE(C,2,hours)) hours,
MAX(DECODE(C,3,dates)) dates,
MAX(DECODE(C,3,hours)) hours,
sum(hours) as Total
FROM (SELECT name,surname,project,dates,hours ,ROW_NUMBER() OVER(PARTITION BY project ORDER BY project) C FROM work ) GROUP BY name,surname,project

这项工作。但我需要动态的SQL查询,因为行数可以是变量。可能吗 ?感谢

1 个答案:

答案 0 :(得分:0)

您可以动态生成sql。查看DBMS_SQL包。但每行需要具有相同的列数。

另一种方法是返回嵌套表或日期和时间的变量。