2014-07-25 67 views
0

我有一个关于具有下列结构和数据枢转一个表的查询Oracle 10g中枢转的表

结构

列名数据类型
EMP_NAME VARCHAR2(30)

DT NUMBER( 2,0)

PRESENT VARCHAR2(1)

EMP_NAME DT PRESENT

V 1 Y 
V 2 Y 
V 3 Y 
V 4 Y 
R 1 N 
R 2 Y 
R 3 Y 
R 4 N 
K 1 Y 
K 2 Y 
K 3 Y 
K 4 N 

我想旋转此表以显示左侧的名称,顶部的日期和现在的中心(更像出席表)。我从互联网上得到了一个代码,但这个功能真的帮助我。请帮助..

期望输出::

名称1 2 3 4 5 6 7 8 9 10 11 12 .......

řyyny ......

V nyyn ......

ķYYYY ....

名称的数目可以生长和dt的列中的数据范围将是从1-31。

在此先感谢

维韦克

回答

0

这里是解决方案,但你需要知道值的数量事前。 这里的假设是'Y'>'N'。

另外请注意,如果实际上表中有些值缺失,就像没有某个日期的记录那么MAX函数将返回null。然后您应该用NVL条款将其包围。

select EMP_NAME 
     ,max(a1) as a1 
     ,max(a2) as a2 
     ,max(a3) as a3 
     ... 
    from (select EMP_NAME 
       ,decode(DT, '1', Present) as a1 
       ,decode(DT, '2', Present) as a2 
       ,decode(DT, '3', Present) as a3 
       ... 
      from test) 
group by EMP_NAME 
order by EMP_NAME; 
+0

Thxx很多@Skoffer ... U让我的一天先生/女士!帽子关! – Vivek