2017-10-17 56 views
2

我有一份報告,我正在處理該報告中有幾個參數傳遞給它。其中之一是由逗號操作的一串UserIds。這些被拆分併發送到表變量。在我的查詢方面,我需要能夠總結值。在這些總和中,我需要將這個值加到總和中,並且在另一種情況下不加入它。該代碼看起來是這樣的......總結一個病例陳述並檢查表中的值變量

SELECT 
     TrnId, 
     TrnCode, 
     (SUM(CASE WHEN PolicyUseId in (select UseId From @Table) then TotalPremium else 0 end)) as Value 
     AnotherColumn 
    FROM SomeTableJoinedOnOtherThings 

,我遇到的問題是這樣的......「不能對包含聚合或子查詢的表達式執行聚合的功能。」我假設,這是IN表的檢查。

我有另一個報告就像這樣,除了我只對我通過查詢的參數進行檢查。

(CASE PolicyUseId when @UseId then PriceColumn else 0 end) 

此查詢可以正常工作並執行所有計算。我不確定如何在沒有這個case語句的情況下在select行中得到總數,因爲我需要拉2組數據,決定如何在選擇中不幸地添加它們。任何建議都會很棒。

+0

如果你刪除了SUM,它是否有效?......如何做一個CTE? – Hackerman

回答

3

也許你並不需要聚集在所有:

SELECT TrnId, TrnCode, 
     (CASE WHEN PolicyUseId in (select UseId From @Table) then TotalPremium else 0 end) as Value 
     AnotherColumn 
FROM SomeTableJoinedOnOtherThings; 

如果你確實需要聚合,你需要一個GROUP BY。然後LEFT JOIN將工作 - 假設你有沒有重複的@Table

SELECT TrnId, TrnCode, 
     SUM(CASE WHEN tt.UseId IS NOT NULL THEN TotalPremium ELSE 0 END) as Value, 
     AnotherColumn 
FROM SomeTableJoinedOnOtherThings t LEFT JOIN 
    @Table tt 
    ON t.PolicyUseId = tt.UseId 
GROUP BY TrnId, TrnCode, AnotherColumn; 
+0

謝謝了。這使得查詢從長遠來看更加易於理解。 –

2

你不能彙集起來對抗一個子查詢。

也許你的例子中的LEFT OUTER JOIN @table指向該字段的PolicyUseId字段的表?然後檢查CASE中的UseId是否爲NULL?