2017-03-03 79 views
0

我正在通過解析Excel類公式生成SQL請求。SUM(IF(COND,EXPR,NULL))和IF(COND,SUM(EXPR),NULL)

因此,對於一個給定的公式,我得到這個請求:

SELECT IF(COL1='Y', SUM(EXPR),NULL) 
FROM Table 

我沒有得到我想要的結果。如果我手動改寫這樣的請求,它的工作原理:

SELECT SUM(IF(COL1='Y', EXPR, NULL)) 
FROM Table 

此外,第一要求產生正確的價值,如果我添加GROUP BY語句,爲COL1='Y'行:

SELECT IF(COL1='Y', SUM(EXPR),NULL) 
FROM Table 
GROUP BY COL1 

是否有辦法保留第一個語法IF(COND, SUM(EXPR), NULL)並稍微編輯它使其在沒有GROUP BY語句的情況下工作?

+1

我想你已經找出了第二個查詢的正確邏輯。 *是*正確的語法(儘管我會使用'case'而不是'if()')。 –

+0

@GordonLinoff,是的,但是我希望我不要觸及產生該行的ANTLR語法:(那麼爲什麼它在我添加一個GROUP BY時起作用? – Amessihel

回答

0

您必須使用GROUP BY,因爲您正在使用SUM - 否則SQL引擎無法告訴您如何總結該列。

或者你只能總結此列:

SELECT SUM(EXPR) 
FROM Table 
WHERE COL1='Y' 

但你必須爲每個這樣的列運行單獨的查詢,閱讀:不建議性能的原因。