Oracle 在SQL中创建附加列,以保持与特定列对应的值计数
我有一个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。
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;