【问题标题】:Pivoting a table in Oracle 10g [duplicate]在 Oracle 10g 中透视表 [重复]
【发布时间】:2014-07-25 07:09:18
【问题描述】:

我有一个关于旋转具有以下结构和数据的表的查询

结构

列名数据类型
EMP_NAME VARCHAR2(30)

DT NUMBER(2,0)

现在的 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.......

R y y n y ......

V n y y n ......

K y y y y ....

名称的数量可以增加,dt 列的数据范围为 1-31。

提前致谢

维韦克

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    这是解决方案,但您需要事先知道值的数量。 这里的假设是 '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;
    

    【讨论】:

    • Thxx 很多 @Skoffer... 先生/女士,你让我开心!脱帽致敬!
    猜你喜欢
    • 2018-03-27
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多