2017-10-18 29 views
1

我嘗試運行查詢:SQL查詢 - GROUP BY SUM掛在那裏沒有任何元素

SELECT statement_element_statement_id, sum(statement_element_commission_amount_change) 
    FROM [chester-prod].[dbo].[ws_statement_element_commissions] 
    JOIN [chester-prod].[dbo].[ws_statement_elements] 
    on [statelemt_element_commission_se_id] = statement_element_id 
    WHERE statement_element_statement_id in 
    (10258, 10226, 10225, 10224, 10223, 
    10220, 10219, 10218, 10217, 10216) 
    GROUP BY statement_element_statement_id 

10258,10226,10225,10224,10223 - 這些ID有元素

10220,10219,10218 ,10217,10216 - 有IDS沒有任何元素

當我運行此查詢,我可以得到5個結果:

SELECT statement_element_statement_id, sum(statement_element_commission_amount_change) 
    FROM [chester-prod].[dbo].[ws_statement_element_commissions] 
    JOIN [chester-prod].[dbo].[ws_statement_elements] 
    on [statelemt_element_commission_se_id] = statement_element_id 
    WHERE statement_element_statement_id in 
    (10258, 10226, 10225, 10224, 10223) 
    GROUP BY statement_element_statement_id 

enter image description here

如何處理掛組時可以有時無法找到特定的id在哪裏聲明的元素?

+2

你是什麼意思的「把手掛」? – GurV

+0

您希望在結果中包含這些數字10220,...(沒有元素)? –

+0

我期望5行數字結果,5行沒有結果,甚至不出現。當出現5個元素(10220,10219,10218,10217,10216)中的至少一個時,我的查詢凍結。編輯:添加屏幕只有5個元素在查詢中,他們都有記錄 – Staly

回答

1

使用右連接(或者相反順序,並使用左連接):

SELECT 
    statement_element_statement_id, 
    sum(statement_element_commission_amount_change) 
FROM 
    [chester-prod].[dbo].[ws_statement_element_commissions] 
    RIGHT JOIN [chester-prod].[dbo].[ws_statement_elements] on 
     [statelemt_element_commission_se_id] = statement_element_id 
WHERE 
    statement_element_statement_id in (
     10258, 10226, 10225, 10224, 10223, 
     10220, 10219, 10218, 10217, 10216 
    ) 
GROUP BY 
    statement_element_statement_id 
+1

NVL是凝聚在MSSQL,沒有幫助 – Staly

+0

statement_element_commission_amount_change是表ws_statement_element_commissions,你不需要NVL或合併 – Indent

+0

'coalesce'或'如果你想有一個默認值isnull'需要 – Indent

0

你可以試試這個。我認爲[ws_statement_elements]表應該在左側。

SELECT statement_element_statement_id, SUM(ISNULL(statement_element_commission_amount_change,0)) 
    FROM [chester-prod].[dbo].[ws_statement_elements] 
     LEFT JOIN [chester-prod].[dbo].[ws_statement_element_commissions] 
    on [statelemt_element_commission_se_id] = statement_element_id 
    WHERE statement_element_statement_id in 
    (10258, 10226, 10225, 10224, 10223, 
    10220, 10219, 10218, 10217, 10216) 
    GROUP BY statement_element_statement_id 
+0

它需要50秒,以使完整請求。 – Staly

+0

以前的結果如何? –

+0

這是在50-60秒之間。 – Staly