2013-01-23 2 views
0

값이 존재하지 않으면 내 합계 함수가 '0'을 반환하도록합니다. 다음에 문제가있는 경우 누구든지 식별 할 수 있습니다. SQL 명령. 나는 유착의 순서를 변경하지만이값이 없으면 MySQL에서 SUM 함수를 사용하여 '0'을 반환합니다.

SqlCommand scGetPostings = new SqlCommand(@" 
SELECT 
    D1.dr, 
    D1.cr, 
    D1.asset_no, 
    (open_bal + dr - cr) AS closing_balance 
FROM (SELECT 
     COALESCE(SUM(dr_amount), 0) AS dr, 
     COALESCE(SUM(cr_amount), 0) AS cr, 
     asset_no 
     FROM posting, sysasset 
     WHERE posting.asset_no = @AssetNumber 
     AND period >= asset_open_per 
     GROUP BY asset_no) AS D1, asset 
WHERE D1.asset_no = asset.asset_no", DataAccess.AssetConnection); 
+0

코드는 올바른 것 같습니다. 문제가 무엇입니까? 'dr' 또는'cr'에 대해'NULL'을 얻고 있습니까? –

+0

그래,이 값이 없다면이 코드는 '0'을 반환하지만 아무것도 리턴하지 않을 것으로 기대한다. 코드는 그 안에 값이있는 레코드를 반환하기 때문에 작동한다. –

+0

'asset_no'에 대한 레코드가 없으면 값을 보시겠습니까? –

답변

0

이 시도 차이를 만들어되지 않았습니다

SELECT 
    asset.asset_no, 
    COALESCE(dr, 0) AS dr, 
    COALESCE(cr, 0) AS cr, 
    (open_bal + COALESCE(dr, 0) - COALESCE(cr, 0)) AS closing_balance 
FROM 
    asset LEFT JOIN 
    (SELECT 
     SUM(dr_amount) AS dr, 
     SUM(cr_amount) AS cr, 
     asset_no 
     FROM posting, sysasset 
     WHERE posting.asset_no = @AssetNumber 
     AND period >= asset_open_per 
     GROUP BY asset_no) AS D1 
ON D1.asset_no = asset.asset_no 
0

사용 if condition을 명세서에 :

SqlCommand scGetPostings = new SqlCommand(@" 
SELECT 
    D1.dr, 
    D1.cr, 
    D1.asset_no, 
    (open_bal + dr - cr) AS closing_balance 
FROM (SELECT 
     SUM(if(dr_amount is null , 0 , dr_amount)) AS dr, 
     SUM(if(cr_amount is null , 0 , cr_amount)) AS cr, 
     asset_no 
     FROM posting, sysasset 
     WHERE posting.asset_no = @AssetNumber 
     AND period >= asset_open_per 
     GROUP BY asset_no) AS D1, asset 
WHERE D1.asset_no = asset.asset_no", DataAccess.AssetConnection);