0

値が存在しない場合、sum 関数が '0' を返すようにしたいのですが、次の SQL コマンドに問題があるかどうかは誰でも特定できますか? 合体の順序を変更しましたが、違いはありません

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);
4

2 に答える 2

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
于 2013-01-23T10:14:57.697 に答える
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);
于 2013-01-23T10:25:13.503 に答える