2014-03-06 218 views
1

我研究了StackOverflow的一些答案來編寫SQL查詢中的CASE語句。下面就是我嘗試:案例陳述失敗

select 
chkdetail_t.check_acct, 
chkheader_t.acct_number, 
CASE WHEN chkdetail_t.check_number = chkdetail_t.check_number THEN SUM(chkdetail_t.amount) 
END AS chek_total, 
chkdetail_t.check_number, 
convert(VARCHAR(10),CAST(chkdetail_t.check_date as datetime), 101) AS chk_date, 
chkdetail_t.amount, 
chkdetail_t.vend_name, 
chkdetail_t.chk_status, 
chkdetail_t.reconsiled, 
chkdetail_t.chk_type, 
chkdetail_t.apr_pay_amt, 
chkdetail_t.apr_disc_amt, 
    chkdetail_t.apr_adj_amt 

當我運行查詢,我得到以下錯誤:

消息8120,級別16,狀態1,行2列 「dbo.chkdetail_t.check_acct '在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。

我的整個目標是將自己的支票號碼相加並總結自己的總額,因爲供應商發票是分開簽發的,我們用一張支票支付。

我讀了另一個有類似問題的線程,但我一直插入並讀取錯誤並嘗試修復SQL查詢的代碼無法正常工作。

任何幫助將不勝感激。

此致馬克

+0

您在'CASE'中使用'SUM'而沒有'GROUP BY',所以出現錯誤。 – user2989408

回答

0
select 
chkdetail_t.check_acct, 
chkheader_t.acct_number, 
SUM(CASE WHEN chkdetail_t.check_number = chkdetail_t.check_number THEN chkdetail_t.amount ELSE NULL END) AS chek_total, 
chkdetail_t.check_number, 
convert(VARCHAR(10),CAST(chkdetail_t.check_date as datetime), 101) AS chk_date, 
chkdetail_t.amount, 
chkdetail_t.vend_name, 
chkdetail_t.chk_status, 
chkdetail_t.reconsiled, 
chkdetail_t.chk_type, 
chkdetail_t.apr_pay_amt, 
chkdetail_t.apr_disc_amt, 
    chkdetail_t.apr_adj_amt 

所有這一切都在SELECT語句,但不以任何聚合函數將在你的小組去BY子句中的列。

+0

因此,除了函數中的所有列以外,我需要按照所有列進行分組? –

+0

是的,閱讀這裏瞭解更多關於['Sql Server Aggregate'](http://technet.microsoft.com/en-us/library/aa213243(v = sql.80).aspx) –

+0

非常感謝。 –