2013-08-06 53 views
0

这是我的脚本如何将输出结果更改为零的sql脚本?

SELECT a.iPriority_num AS [TransNUM],b.sItem_nm as [Item],a.mSellingPrice_amt AS [aMT], 
     SUM(c.mCash_amt) AS [CASH] 
     ,SUM(c.mCCard_amt) AS [CC] 
     ,SUM(c.mEPS_amt) AS [CEPS] 
     ,SUM(c.mGCheque_amt) AS [GC] 
     ,SUM(c.mCheque_amt) AS [OTHERS] 
    FROM Table1 a 
    LEFT JOIN Table2 b 
    ON a.sPlu_cd=b.sPlu_cd 
    LEFT JOIN Table3 c 
    ON a.iPriority_num=c.iPriority_num AND 
    a.iBranch_num=c.iBranch_num 
    AND b.iCompany_typ=c.iCompany_typ 
    WHERE a.IAPPLY_DT BETWEEN 20130701 AND 20130731 
    AND a.iBranch_num=14 
    AND a.iStatus_typ=1 
    AND a.sSellUnit_CD='PC' 
    AND a.IPRIORITY_NUM=118271 
    GROUP BY 
    a.iPriority_num,b.sItem_nm,a.mSellingPrice_amt 

结果是

TransNUM Item Price  Cash  CC  EPS GC  others   
    118271 Item1 204.0000 392.0000 .0000 .0000 .0000 .0000 
    118271 Item2 188.0000 392.0000 .0000 .0000 .0000 .0000 

我想让第二行(392)的值只有0。我在这里使用SQL 2000。

+0

我很好奇。为什么你希望查询输出为零,而不是在你的后台修改它 –

+0

任何特定的RDBMS? –

+0

@RowlandShaw我相信这是MSSQL,因为在查询中有方括号 –

回答

0

该查询会给你想要的结果:

SELECT a.iPriority_num AS [TransNUM],b.sItem_nm as [Item],a.mSellingPrice_amt AS [aMT], 
     [CASH] = CASE WHEN ROW_NUMBER() OVER 
        (ORDER BY a.iPriority_num,b.sItem_nm,a.mSellingPrice_amt) = 2 
       THEN 0 ELSE SUM(c.mCash_amt) END 
     ,SUM(c.mCCard_amt) AS [CC] 
     ,SUM(c.mEPS_amt) AS [CEPS] 
     ,SUM(c.mGCheque_amt) AS [GC] 
     ,SUM(c.mCheque_amt) AS [OTHERS] 
FROM Table1 a 
LEFT JOIN Table2 b 
ON a.sPlu_cd=b.sPlu_cd 
LEFT JOIN Table3 c 
ON a.iPriority_num=c.iPriority_num AND 
a.iBranch_num=c.iBranch_num 
AND b.iCompany_typ=c.iCompany_typ 
WHERE a.IAPPLY_DT BETWEEN 20130701 AND 20130731 
AND a.iBranch_num=14 
AND a.iStatus_typ=1 
AND a.sSellUnit_CD='PC' 
AND a.IPRIORITY_NUM=118271 
GROUP BY 
a.iPriority_num,b.sItem_nm,a.mSellingPrice_amt 

可是我最好还是要做到这一点的客户端,而不是服务器端

+0

我得到错误! 'ROW_NUMBER'不是一个可识别的函数名称,我在这里使用mssql2000。 –

+0

哦,我错过了!此解决方案适用于MSSQL 2005及更高版本 –