我有一个关于使用以下结构和数据来旋转表的查询
结构
列名数据类型
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
我想调整此表格以显示左侧的名称,顶部的日期和中心的现在(更像是考勤表)。我从互联网上得到了一个代码,但那个dint真的对我很有帮助。请帮忙..
预期输出::
姓名1 2 3 4 5 6 7 8 9 10 11 12 .......
R y y n y ......
V n y y n ...... ......
K y y y y ....
名称数量可以增长,dt列的数据范围将为1-31。
提前致谢
的Vivek
答案 0 :(得分: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;