2017-10-18 7 views
1

SUM BY GROUPがハング:SQLクエリ - 私は、クエリを実行しようとするところがない要素

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を持っています

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 

0: - 、10217、10216のIDが要素を持っていないが、私はこのクエリを実行すると

私は5件の結果を得ることができます

グループ別でハングアップを処理する方法で、whereステートメントの特定のIDの要素が見つからないことがありますか?

+2

「ハンドルハンギング」とはどういう意味ですか? – GurV

+0

あなたはその数字10220、...(要素なし)を結果に入れたいですか? –

+0

私は数値結果の5行、結果のない5行、または表示さえしないことを期待しています。 5つの要素(10220、10219、10218、10217、10216)の少なくとも1つが表示されると、クエリがフリーズします。編集:すべてのレコードを持っているクエリで唯一の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

関連する問題