2017-02-12 79 views
1

我有兩個表分列從另一個表

TB_1      TB_3 

Month  Total   Month  Total 
2012-01  6   2012-01   12 
2013-02  6   2013-02   12 
2014-03  10   2014-03   20 
2015-04  10   2015-04   20 

在結果列表中,我需要遵循結果:

 RESULT_TB 

Month  Total 
2012-01  2 
2013-02  2 
2014-03  2 
2015-04  2 

我試過如下:

Select TB_3.total/TB_1.total 
From TB_3, TB_1 

但它不起作用,請告訴我,怎麼辦?

回答

0

試試這個:

select t1.month, 
    case 
     when t1.total = 0 
      then null 
     else t2.total/t1.total 
     end total 
from tb_1 t1 
join tb_3 t2 on t1.month = t2.month 

我以前CASE,以確保如果有零總在TB_1表,輸出來作爲NULL,而不是零錯誤拋出鴻溝。

+0

謝謝@GurV!如果我想考慮第6個數字中有多少個數字是2?可以辦到? – Kirill

+0

@Kirill - 你的意思是?請提出一個新的問題,詳細說明你想得到什麼。 – GurV

0

你似乎只需要一個適當的JOIN條件:

Select t3.month, t3.total/t1.total 
From TB_3 t3 JOIN 
    TB_1 t1 
    ON t3.month = t1.month; 

注:如果表有不同的套個月,那麼你可能需要某種形式的外連接。

另外,當兩個操作數都是整數時,Postgres會進行整數除法。目前還不清楚你是否想要。但是,如果值是「15」和「2」,那麼結果將是「7」而不是「7.5」。

0

你可以試試這個代碼:

 SELECT ISNULL(T1.Month,T2.Month) AS Month 
      , CASE WHEN ISNULL(T1.Total,0) = 0 THEN ISNULL(T2.Total,0) 
       ELSE ISNULL(T2.Total,0)/ISNULL(T1.Total,0) 
       END AS Total 
     FROM TB_1 AS T1 
    FULL JOIN TB_2 AS T2 ON T1.Month = T2.Month 

我用FULL JOIN趕上兩個表中的所有日期。我檢查了所有的NULL值,並用可分割的值替換NULL。

0

對於只匹配月,使用此 -

select TB_1.month      as month 
     ,TB_3.total/nullif(TB_1.total,0) as total 

from   TB_1 
      join TB_3 
      on TB_3.month = TB_1.month 

order by month  

如果你想也顯示不匹配個月的結果,用這個 -

select coalesce(TB_1.month,TB_3.month)  as month 
     ,TB_3.total/nullif(TB_1.total,0) as total 

from     TB_1 
      full join TB_3 
      on   TB_3.month = TB_1.month 

order by month  
  1. nullif(X,0)是表達一個乾淨的方式 -
    返回X除非它等於0,在那種情況下返回NULL

  2. 如果total列是整數類型,更換TB_3.totalTB_3.total::numeric(12,2)(或其它精密只要你喜歡)