2014-02-21 45 views
0

來總結我有一個查詢,看起來像這樣:設置一個變量,以識別特定領域在MySQL

SELECT 'FY14' AS YEAR, 
SUM(IF(acctcode = 'KAE',sc.bal03,0)) AS NIBD, 
SUM(IF(acctcode = 'GAA',sc.bal03,0)) AS Labor 
FROM summarycurrent AS sc 

sc.bal03是領域於12月值的揚月份當月值存儲在sc.bal04。我有查詢引用sc.bal03多達20次,並更改字段名稱以從不同的月份提取數據是重複的,並且容易出錯。我想使用一個變量來告訴查詢哪個字段總結,但我不明白,如果它甚至是可能的。

我現在的(非功能)查詢看起來是這樣的:

SET @Var:= sc.Bal03; 
SELECT 'FY14' AS YEAR, 
SUM(IF(acctcode = 'KAE',@Var,0)) AS NIBD, 
SUM(IF(acctcode = 'GAA',@Var,0)) AS Labor 
FROM summarycurrent AS sc 

我得到任何FY14, 0, 0作爲結果,或錯誤sc.不在字段列表。 我只想定義sc.Bal03作爲一次總和的字段,而不是多次這樣做。

在此先感謝您的幫助。

+1

可能的重複:http://stackoverflow.com/questions/6593078/mysql-stored-functions-dynamic-variable-table-column-names –

回答

0

,你可以嘗試使用子查詢,並重新命名bal03bal04value這樣

SELECT 'FY14' AS YEAR, 
SUM(IF(acctcode = 'KAE',value,0)) AS NIBD, 
SUM(IF(acctcode = 'GAA',value,0)) AS Labor 
FROM 
(SELECT acctcode, bal03 as value FROM 
summarycurrent 
)as sc 

SELECT 'FY14' AS YEAR, 
SUM(IF(acctcode = 'KAE',value,0)) AS NIBD, 
SUM(IF(acctcode = 'GAA',value,0)) AS Labor 
FROM 
(SELECT acctcode, bal04 as value FROM 
summarycurrent 
)as sc 

這樣,你只需要改變bal03bal04一次。

+0

我相信這個答案將起作用。唯一的缺點是,在一些類似的查詢中,我已經有了子查詢,然後可能需要多個子級別的索引,並且引用進一步向下查詢並不是那麼容易在我的面前編輯。如果沒有其他解決方案,我會將其標記爲已回答。 – user3338398