2015-10-13 64 views
0

我有一張表,其中一列應該根據另一列挑選數據。這可能是最好的展示。從不同標準的列中選擇一個表 - SQL Oracle

我的DB:

enter image description here

預期結果:

enter image description here

所以我試圖用join做到這一點,但它可能是錯的,因爲這一切都從一個表。我被困在這一點:

SELECT b1.area as line, b2.budget/12 as flow_MTD, b2.budget as flow_BUDGET, 
b1.budget/12 as investment_products_MTD, b1.budget as 

investment_products_BUDGET, 
b3.budget/12 as bonds_MTD, b3.budget as bonds_BUDGET, 
b4.budget/12 as structure_MTD, b4.budget as structure_BUDGET  

    FROM budgets b1 

    JOIN budgets b2 ON b1.area=b2.area 

    JOIN budgets b3 ON b1.area=b3.area 
    JOIN budgets b4 ON b1.area=b4.area 

    where b1.limit = 'main' 
    and b1.neighbourhood = 'alpha' 
    and b2.neighbourhood = 'beta' 

    and b3.neighbourhood = 'delta' 
    and b4.neighbourhood = 'gamma' 

什麼是一個正確的方法來做到這一點..?

編輯/ UPDATE:由於我的問題已經被標記爲可能由Oracle SQL pivot query 解決..該解決方案似乎不起作用,除非能夠糾正:

SELECT SUM(CASE WHEN t.neighbourhood = 'alpha' THEN t.value ELSE 0 END) AS alpha, 
     SUM(CASE WHEN t.neighbourhood = 'beta' THEN t.value ELSE 0 END) AS beta, 
     SUM(CASE WHEN t.neighbourhood = 'delta' THEN t.value ELSE 0 END) AS delta, 
     SUM(CASE WHEN t.neighbourhood = 'gamma' THEN t.value ELSE 0 END) AS gamma 
    FROM budgets t 
+2

它被稱爲_pivot_。使用術語「oracle」和「pivot」搜索SO上的一些問題 –

+3

[Oracle SQL數據透視查詢](http://stackoverflow.com/questions/4841718/oracle-sql-pivot-query) –

+0

@FlorinGhita謝謝徵求意見。但是,由於某些原因,用我的數據替換該數據,導致錯誤.. 'SELECT SUM(CASE WHEN t.neighbourhood ='alpha'THEN t.value ELSE 0 END)AS alpha, SUM(CASE WHEN t.neighbourhood ='beta'THEN t.value ELSE 0 END)AS beta, SUM(CASE WHEN t.neighbourhood ='delta'THEN t.value ELSE 0 END)AS delta, SUM(CASE WHEN t.neighbourhood ='gamma' THEN t.value ELSE 0 END)AS gamma FROM budget t' –

回答

0

這是你在看什麼爲

SELECT b.area, 
     v.total_alpha/12 AS monthly_alpha, 
     v.total_alpha, 
     v.total_beta/12 AS monthly_beta, 
     v.total_beta, 
     v.total_gamma/12 AS monthly_gamma, 
     v.total_gamma, 
     v.total_delta/12 AS monthly_delta, 
     v.total_delta, 
     v.total_alpha + v.total_beta + v.total_gamma + v.total_delta AS total 
FROM (SELECT b.area, 
      SUM(DECODE(b.neighbourhood, 'alpha', b.budget, 0)) AS total_alpha, 
      SUM(DECODE(b.neighbourhood, 'beta', b.budget, 0)) AS total_beta, 
      SUM(DECODE(b.neighbourhood, 'gamma', b.budget, 0)) AS total_gamma, 
      SUM(DECODE(b.neighbourhood, 'delta', b.budget, 0)) AS total_delta 
     FROM budgets b 
     GROUP BY b.area 
    ) v 
相關問題