You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle中用SELECT语句生成B、C值组合的统计矩阵?

Oracle 实现行列转换的统计矩阵查询

可以通过单条SELECT语句实现需求,不需要建表或编写额外脚本,核心思路是用条件聚合配合CTE生成所有可能的Column C值,确保统计矩阵包含所有预期的行和列。

完整查询语句

假设你的表名为your_table,替换为实际表名即可:

WITH c_values AS (
    SELECT '0' AS col_c FROM DUAL UNION ALL
    SELECT '1' FROM DUAL UNION ALL
    SELECT '2' FROM DUAL UNION ALL
    SELECT '3' FROM DUAL UNION ALL
    SELECT '4' FROM DUAL UNION ALL
    SELECT '5' FROM DUAL UNION ALL
    SELECT '6' FROM DUAL UNION ALL
    SELECT '7' FROM DUAL UNION ALL
    SELECT '8' FROM DUAL UNION ALL
    SELECT '9' FROM DUAL UNION ALL
    SELECT 'A' FROM DUAL
)
SELECT
    cv.col_c AS "Column C",
    COUNT(CASE WHEN t.column_b = 0 THEN 1 END) AS "B=0",
    COUNT(CASE WHEN t.column_b = 1 THEN 1 END) AS "B=1",
    COUNT(CASE WHEN t.column_b = 3 THEN 1 END) AS "B=3",
    COUNT(CASE WHEN t.column_b = 7 THEN 1 END) AS "B=7"
FROM c_values cv
LEFT JOIN your_table t ON cv.col_c = t.column_c
GROUP BY cv.col_c
ORDER BY cv.col_c;

关键部分说明

  1. 生成所有Column C的可能值

    • 用CTE c_values构造Column C的全部唯一值集合(0-9、A),确保即使没有对应记录的C值也会出现在结果的行中,避免遗漏。
  2. 条件聚合统计

    • 每个Column B的可能值作为单独一列,通过COUNT(CASE ...)实现条件统计:当column_b等于目标值时返回1,否则返回NULL,COUNT会自动忽略NULL值,最终得到该B、C组合的记录数。
  3. LEFT JOIN 保留所有行

    • 通过LEFT JOIN关联原表,保证c_values中的所有C值都被保留,不会因为原表中无对应记录而消失。

执行结果示例

针对你提供的样本数据,执行后会得到如下结果:

Column CB=0B=1B=3B=7
00000
10000
20000
30021
40000
50000
60000
70100
80000
90000
A1000

内容的提问来源于stack exchange,提问作者Logy Tegus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:10:40