在甲骨文聚合旋转/枢转表(Rotate/pivot table with aggregation i

2019-06-25 07:02发布

我想在Oracle 11g中旋转表。 枢轴选项需要一个聚集。 这是我原来的表:

project | attribute | value
===========================
'cust1' | 'foo'     | '4'
'cust2' | 'bar'     | 'tbd'
'cust3  | 'baz'     | '2012-06-07'
'cust1' | 'bar'     | 'tdsa'
'cust4' | 'foo'     | '22'
'cust4' | 'baz'     | '2013-01-01'

旋转后,表格应该是这样的:

project | foo | bar | baz
=========================
'cust1' | '4' |'tdba'| NULL
'cust2' | NULL|'tbd' | NULL
'cust3' | NULL| NULL | '2012-06-07'
'cust4' | '22'| NULL | '2013-01-01'

现在,你可以看到,分组应该发生在项目列。 没有值需要被折叠或calcucation。 区区旋转是必要的。 因此,在枢轴选择做正确的事?

Answer 1:

是的,我想是这样。 这是很容易做到这样的支点与MAX骨料:

SELECT
    *
FROM
(
    SELECT
        project,
        attribute,
        value
    FROM
        table1
) AS SourceTable
PIVOT
(
    MAX(value)
    FOR attribute IN ([foo],[bar],[baz])
) AS pvt

否则,你必须做一个最大集合内case语句。 像这样:

SELECT
    MAX(CASE WHEN attribute='foo' THEN value ELSE NULL END) AS foo,
    MAX(CASE WHEN attribute='bar' THEN value ELSE NULL END) AS bar,
    MAX(CASE WHEN attribute='baz' THEN value ELSE NULL END) AS baz,
    project
FROM
    table1
GROUP BY
    project

这几乎是同样的事情做PIVOT 。 但我宁愿做PIVOTCASE WHEN MAX ..



文章来源: Rotate/pivot table with aggregation in Oracle