2016-07-07 18 views
1

值的計數我有一個SQL表:在創建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 

有3種類型的行動:P_A,P_B,P_C。 現在,我需要使用3個額外的列更新表,爲每個類型的每個id提供一個計數。Oracle SQl查詢會是什麼?決賽桌應該是這樣的。

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 

回答

1
UPDATE MY_SQL_TABLE 
    SET TypeA = 
      (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), 
     TypeB = 
      (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), 
     TypeC = 
      (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); 

這樣的觀點:

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; 
+1

只是一個評論我會獨自離開你的原始表並執行類似UltraCommits作爲一種解決方案一個看法。然後顯示視圖中的信息,否則試圖保持該表與CRUD操作同步將是一場噩夢。 –

+0

...剛剛編輯添加Oracle視圖的解決方案! – UltraCommit