当前位置: 代码迷 >> Sql Server >> 一个sql的小疑点
  详细解决方案

一个sql的小疑点

热度:8   发布时间:2016-04-24 09:46:05.0
求助一个sql的小问题
我做这个查询需求是如果b.contractid=1那么c.contractamount就会等于空或者0,请问各位大神们该怎么改
	SELECT
b.id,
b.contractid,
b.prjname,
b.prjmanager,
b.budgetamount,
b.ownerorg,
b.jlorg,
b.settleprinciple,
b.remark,
b.createmanid,
b.createdatetime,
b.relevance,
b.createorgid,
c.contractamount
FROM projbudge as b 
cross join projcostaccouting as c 
WHERE 1=1 and b.contractid=1


------解决思路----------------------
SELECT
            b.id,
            b.contractid,
            b.prjname,
            b.prjmanager,
            b.budgetamount,
            b.ownerorg,
            b.jlorg,
            b.settleprinciple,
            b.remark,
            b.createmanid,
            b.createdatetime,
            b.relevance,
            b.createorgid,
            case when b.contractid=1 then c.contractamount else 0 end as contractamount 
        FROM projbudge as b 
        cross join projcostaccouting as c
 
------解决思路----------------------
用CASE处理就可以啦,要NULL 要0都做得到

或许应该直接左连接
SELECT
            b.id,
            b.contractid,
            b.prjname,
            b.prjmanager,
            b.budgetamount,
            b.ownerorg,
            b.jlorg,
            b.settleprinciple,
            b.remark,
            b.createmanid,
            b.createdatetime,
            b.relevance,
            b.createorgid,
            c.contractamount
        FROM projbudge as b 
        LEFT join projcostaccouting as c ON b.contractid=1 and 其他连接条件
  相关解决方案