【发布时间】:2021-07-02 06:08:54
【问题描述】:
我在 Oracle 18c 中有这张表:
+-----------+------------+------------------+
| ID | Rule 1 | Rule 2 | Rule 3 |
+-----------+------------+------------------+
| ID001 | PASSED | FAILED | PASSED |
| ID002 | FAILED | FAILED | FAILED |
| ID003 | FAILED | PASSED | PASSED |
| ID004 | FAILED | PASSED | PASSED |
| ID005 | FAILED | PASSED | FAILED |
| ID006 | FAILED | PASSED | PASSED |
| ID007 | FAILED | PASSED | FAILED |
| ID008 | FAILED | PASSED | PASSED |
| ID009 | FAILED | PASSED | FAILED |
| ID010 | FAILED | PASSED | FAILED |
+-----------+------------+---------+--------+
我想将其转换为根据 ID 计数计算每个失败/通过的规则
预期结果如下:
+-----------+---------------------+
| Rules | PASSED | FAILED |
+-----------+---------------------+
| Rule 1 | 1 | 10 |
| Rule 2 | 8 | 2 |
| Rule 3 | 5 | 5 |
+-----------+------------+--------+
另外一个问题是,表将来可能会增长(添加更多列),并且查询应该能够在不进行任何更改的情况下处理它。
我怎样才能做到这一点?
【问题讨论】:
-
修复你的数据模型!您将数据存储在应该位于不同行中的列中。
-
我真的希望我能做到这一点,但现在这不是一个选择......
-
。 .向表中添加新列会更改数据模型。
-
必须是一条 SQL 语句吗?通常,如果您希望枢轴是动态的,您会创建一些动态创建枢轴查询的 PL/SQL。
-
不,它不必是单个 SQL 语句...