【问题标题】:Pivot Table in Oracle?Oracle中的数据透视表?
【发布时间】:2018-10-03 03:45:17
【问题描述】:

我有一个包含许多列的表,用于指定错误是否有效。我需要以这样的方式输出,列名将错误指定为行以及每个错误的有效和无效字段的计数。

下面的类似输入和预期输出示例

id   name            txn_column_name  flag1 flag2 flag3 
1    Resident Count  resident_ct      Y     Y     N
2    Incident Count  incident_ct      Y     Y     Y
3    Facility Status facil_stat       N     N     N

需要输出

Col1_name Y_Count    N_Count
flag1       2            1
flag2       2            1
flag3       1            2

【问题讨论】:

    标签: sql database oracle pivot unpivot


    【解决方案1】:

    我们可以在这里尝试使用 Oracle 的 UNPIVOT 运算符:

    SELECT
        flag AS Col1_name,
        COUNT(CASE WHEN val = 'Y' THEN 1 END) AS Y_Count,
        COUNT(CASE WHEN val = 'N' THEN 1 END) AS N_Count
    FROM yourTable
    UNPIVOT
    (
        val FOR (flag) IN (
            flag1 AS 'flag1',
            flag2 AS 'flag2',
            flag3 AS 'flag3'
        )
    )
    GROUP BY
        flag
    ORDER BY
        flag;
    

    Demo

    另一个简单的选项使用一系列联合:

    SELECT
        'flag1' AS Col1_name,
        COUNT(CASE WHEN flag1 = 'Y' THEN 1 END) AS Y_Count,
        COUNT(CASE WHEN flag1 = 'N' THEN 1 END) AS N_Count
    FROM yourTable
    UNION ALL
    SELECT 'flag2', COUNT(CASE WHEN flag2 = 'Y' THEN 1 END),
        COUNT(CASE WHEN flag2 = 'N' THEN 1 END)
    FROM yourTable
    UNION ALL
    SELECT 'flag3', COUNT(CASE WHEN flag3 = 'Y' THEN 1 END),
        COUNT(CASE WHEN flag3 = 'N' THEN 1 END)
    FROM yourTable
    ORDER BY 1;
    

    Demo

    【讨论】:

    • 非常感谢...非常有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2018-11-05
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多