2015-12-24 32 views
0

我有一個交易細節表,我試圖編譯成每筆交易一筆交易。以下是一些示例行的圖像。 detail_id不是必需的,只是在那裏顯示細節。檢查SUM並忽略零值?

Row Examples

我期待通過tran_num編譯總量而忽視了collections_go_to柱(我需要爲最終結果的ID),但前提是adjustment_idresp_party_iddate_entered和「位置」的比賽另一行​​

我認識到可以用GROUP BY輕鬆完成。我的問題是什麼,我會怎麼做的檢查,基本上看前看: SUM(量)<> 0,其中​​和location匹配:

Ignore Total

所以,像這樣的行可以總計,然後由於零值而被忽略?

SELECT tran_num, resp_party_id, collections_go_to, SUM(amount) AS Total, 
    adjustment_id, type, impacts, clinic, date_entered 
FROM dbo.transactions 
WHERE (status <> 'D') 
    AND (status <> 'V') 
    AND (adjustment_id IS NOT NULL) 
    AND (date_entered > '2015-06-01') 
GROUP BY 
    tran_num, resp_party_id, 
    collections_go_to, adjustment_id, 
    type, impacts, clinic, date_entered 

這是目前我使用,我暫時忽略了paytype_id列中的數據的視圖。

編輯更新:感謝您的答覆,HAVING子句似乎是處理一些這種方式,但不幸的是collections_go_to列需要被忽略的計算檢查否則我只是最終得到多個結果爲​​。有沒有辦法基本上做一個子查詢做一個檢查沒有collections_go_to列消除任何​​導致零,但我仍然需要collections_go_to ID。也許看到這​​總爲零,然後拉這些ID進行到底的結果

+4

查找到HAVING子句 – Rabbit

回答

0

作爲替代HAVING子句,包你的查詢作爲這樣的子查詢:

SELECT tran_num, resp_party_id, collections_go_to, Total, 
     adjustment_id, type, impacts, clinic, date_entered 
FROM (
    SELECT tran_num, resp_party_id, collections_go_to, SUM(amount) AS Total, 
     adjustment_id, type, impacts, clinic, date_entered 
    FROM dbo.transactions 
    WHERE (status <> 'D') 
     AND (status <> 'V') 
     AND (adjustment_id IS NOT NULL) 
     AND (date_entered > '2015-06-01') 
    GROUP BY 
     tran_num, resp_party_id, 
     collections_go_to, adjustment_id, 
     type, impacts, clinic, date_entered 
)T 
WHERE T.Total <> 0 

雖然這種用法在這裏似乎微不足道的,這是一個非常強大的技術。人們也可以使用熱膨脹係數爲相同效果(具有改善可讀性的獎金):

;WITH T as (
    SELECT tran_num, resp_party_id, collections_go_to, SUM(amount) AS Total, 
     adjustment_id, type, impacts, clinic, date_entered 
    FROM dbo.transactions 
    WHERE (status <> 'D') 
     AND (status <> 'V') 
     AND (adjustment_id IS NOT NULL) 
     AND (date_entered > '2015-06-01') 
    GROUP BY 
     tran_num, resp_party_id, 
     collections_go_to, adjustment_id, 
     type, impacts, clinic, date_entered 
) 
SELECT tran_num, resp_party_id, collections_go_to, Total, 
     adjustment_id, type, impacts, clinic, date_entered 
FROM T 
WHERE T.Total <> 0 
2

經由:具有

SELECT tran_num, resp_party_id, collections_go_to, SUM(amount) AS Total, 
     adjustment_id, type, impacts, clinic, date_entered 
    FROM dbo.transactions 
    WHERE (status <> 'D') 
    AND (status <> 'V') 
    AND (adjustment_id IS NOT NULL) 
    AND (date_entered > '2015-06-01') 
    GROUP BY 
    tran_num, resp_party_id, 
    collections_go_to, adjustment_id, 
    type, impacts, clinic, date_entered 
    Having sum(amount) <> 0