Oracle 在SQL中创建附加列,以保持与特定列对应的值计数

Oracle 在SQL中创建附加列,以保持与特定列对应的值计数,oracle,oracle11g,oracle-sqldeveloper,Oracle,Oracle11g,Oracle Sqldeveloper,我有一个SQL表: id p_action0 p_action1 p_action2 1 p_A_id1 p_B_id3 p_A_id2 2 p_A_id1 p_C_id3 p_B_id1 3 p_A_id1 p_A_id1 p_A_id1 4 p_B_id1 p_B_id1 p_C_id3 5 p_B_id1 p_B_id1 p_A_id1 有三种类型的动作:p_A、p_B、p_C。

我有一个SQL表:

id  p_action0   p_action1   p_action2
1   p_A_id1      p_B_id3    p_A_id2
2   p_A_id1      p_C_id3    p_B_id1
3   p_A_id1      p_A_id1    p_A_id1
4   p_B_id1      p_B_id1    p_C_id3
5   p_B_id1      p_B_id1    p_A_id1
有三种类型的动作:p_A、p_B、p_C。 现在,我需要用3个额外的列来更新该表,这些列为每种类型的每个id提供计数?最后一张表应该是这样的

id  p_action0   p_action1   p_action2   TypeA   TypeB   TypeC
1   p_A_id1     p_B_id3     p_A_id2        2       1     0
2   p_A_id1     p_C_id3     p_B_id1        1       1     1
3   p_A_id1     p_A_id1     p_A_id1        3       0     0
4   p_B_id1     p_B_id1     p_C_id3        0       2     1
5   p_B_id1     p_B_id1     p_A_id1        1       2     0
作为一种观点:

CREATE OR REPLACE VIEW MY_SQL_VIEW
AS
   SELECT id,
          p_action0,
          p_action1,
          p_action2,
            (CASE WHEN p_action0 LIKE 'p_A%' THEN 1 ELSE 0 END)
          + (CASE WHEN p_action1 LIKE 'p_A%' THEN 1 ELSE 0 END)
          + (CASE WHEN p_action2 LIKE 'p_A%' THEN 1 ELSE 0 END)
             typeA,
            (CASE WHEN p_action0 LIKE 'p_B%' THEN 1 ELSE 0 END)
          + (CASE WHEN p_action1 LIKE 'p_B%' THEN 1 ELSE 0 END)
          + (CASE WHEN p_action2 LIKE 'p_B%' THEN 1 ELSE 0 END)
             typeB,
            (CASE WHEN p_action0 LIKE 'p_C%' THEN 1 ELSE 0 END)
          + (CASE WHEN p_action1 LIKE 'p_C%' THEN 1 ELSE 0 END)
          + (CASE WHEN p_action2 LIKE 'p_C%' THEN 1 ELSE 0 END)
             typeC
     FROM my_sql_table;
。。。然后:

SELECT * FROM MY_SQL_VIEW;

只需一个注释,我就不必理会您的原始表,而是将UltraCommits这样的解决方案实现为一个视图。然后显示视图中的信息,否则试图使该表与CRUD操作保持同步将是一场噩梦。。。。刚刚编辑添加带有Oracle视图的解决方案!
SELECT * FROM MY_SQL_VIEW;