2016-10-24 55 views
0

我想從column1+column2(they are calculated columns).SQL存儲過程,列從其他兩個計算列

Column3 = Column1*.666+Column2*.3333 

Column1Column2插入column3值計算從case語句產生的,他們都很好,但它只是Column3這是基於 Column1Column2。任何人都可以幫助我如何計算Column3

任何幫助,將不勝感激。

在此先感謝

  INSERT INTO IF_FUNDDETAILS (D.FUNDCODE, D.FUNDNAME, Column1,Column2, Column3) 
      SELECT DISTINCT D.FUNDCODE, D.FUNDNAME, 
    CASE WHEN AVG(FD.INDUSTRYCONTRIBUTIONS)>80 THEN '80' ELSE '90' END AS Column1, 
    CASE WHEN AVG(FD.BENEFITSCONTRIBUTIONS)>50 THEN '50' ELSE '90' END AS Column2, 
      FROM DBO.WS_FUNDDETAIL AS D 
      LEFT OUTER JOIN DBO.V_FUNDNOOUTOFPOCKET AS NOP ON D.FUNDDETAILID = NOP.FUNDDETAILID 
      INNER JOIN DBO.WS_FUNDDATA AS FD ON NOP.FUNDREPORTID = FD.FUNDREPORTID 
      GROUP BY D.FUNDCODE, D.FUNDNAME 
+0

嘗試添加這些2個案例 –

+0

您是使用MySQL還是SQL Server?有人刪除了MySQL標籤,但也許這是不對的。 –

回答

0

您不能在查詢的同一級別重用別名。因此,重複剛纔的表情CASE

INSERT INTO IF_FUNDDETAILS (D.FUNDCODE, D.FUNDNAME, Column1, Column2, Column3) 
SELECT DISTINCT 
    D.FUNDCODE, 
    D.FUNDNAME, 
    CASE WHEN AVG(FD.INDUSTRYCONTRIBUTIONS) > 80 THEN 80 ELSE 90 END AS Column1, 
    CASE WHEN AVG(FD.BENEFITSCONTRIBUTIONS) > 50 THEN 50 ELSE 90 END AS Column2, 
    0.666 * (CASE WHEN AVG(FD.INDUSTRYCONTRIBUTIONS) > 80 THEN 80 ELSE 90 END) + 
    0.333 * (CASE WHEN AVG(FD.BENEFITSCONTRIBUTIONS) > 50 THEN 50 ELSE 90 END) AS Column3 
FROM DBO.WS_FUNDDETAIL AS D 
LEFT OUTER JOIN DBO.V_FUNDNOOUTOFPOCKET AS NOP 
    ON D.FUNDDETAILID = NOP.FUNDDETAILID 
INNER JOIN DBO.WS_FUNDDATA AS FD 
    ON NOP.FUNDREPORTID = FD.FUNDREPORTID 
GROUP BY D.FUNDCODE, 
     D.FUNDNAME 

注:我刪除了單引號括起來在CASE表達式人數達因爲它似乎你要正確對待這些表達式爲數字,而不是文本的結果。

0

你不能只是一個INSERT語句做到這一點。

你可以做的是。

  1. 作爲

    更新表中插入到表的所有值除了柱3.

  2. 更新以上一行欄3 tblName設定欄3 =列1 * 0.666 +列2 * 0.3333 where子句

希望這會有所幫助。

0

你可以用CTE做。

;with cte 
AS 
(
SELECT DISTINCT D.FUNDCODE, D.FUNDNAME, 
    CASE WHEN AVG(FD.INDUSTRYCONTRIBUTIONS)>80 THEN '80' ELSE '90' END AS Column1, 
    CASE WHEN AVG(FD.BENEFITSCONTRIBUTIONS)>50 THEN '50' ELSE '90' END AS Column2, 
      FROM DBO.WS_FUNDDETAIL AS D 
      LEFT OUTER JOIN DBO.V_FUNDNOOUTOFPOCKET AS NOP ON D.FUNDDETAILID = NOP.FUNDDETAILID 
      INNER JOIN DBO.WS_FUNDDATA AS FD ON NOP.FUNDREPORTID = FD.FUNDREPORTID 
      GROUP BY D.FUNDCODE, D.FUNDNAME 

) 

INSERT INTO IF_FUNDDETAILS (FUNDCODE, FUNDNAME, Column1,Column2, Column3) 
SELECT * , Column1*.666+Column2*.3333 AS Column3 from cte