sql语句问题

lqsmn613 2010-01-11 03:23:59

select b.subprjid,sum(b.achieve) as lastachieve,sum(b.material) as lastmaterial,sum(b.due) as lastdue
,sum(isnull(CAST(b.dkkcl AS FLOAT),0)) as lastdkkcl
,sum(isnull(CAST(b.dkkfk AS FLOAT),0)) as lastdkkfk
,sum(isnull(CAST(b.dkksdf AS FLOAT),0)) as lastdkksdf
,sum(isnull(CAST(b.dkkst AS FLOAT),0)) as lastdkkst
,sum(isnull(CAST(b.dkkqt AS FLOAT),0)) as lastdkkqt
,sum(isnull(CAST(b.other AS FLOAT),0)) as lastother
,sum(isnull(CAST(b.obligate AS FLOAT),0)) as lastobliget
,sum(isnull(CAST(a.achieve AS FLOAT),0)) as yearachieve
,sum(isnull(CAST(a.material AS FLOAT),0)) as yearmaterial
,sum(isnull(CAST(a.due AS FLOAT),0)) as yeardue
from t_subcontract_subfinishproduction as b,t_subcontract_subfinishproduction as a
where b.subprjid='EB2009050412398898142851954589888' and b.yyyy+'-'+b.mm<'2010-01' and a.yyyy='2010' and a.subprjid='EB2009050412398898142851954589888'
group by b.subprjid


上面的语句查询的时候,查询b里面是有数据的,而a里面没有数据,这种情况就会搞的最后显示的表中都没有数据了,怎么解决啊?
...全文
110 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
colin_pxx 2010-01-12
  • 打赏
  • 举报
回复
where 语句里应该写b.subprjid=a.subprjid and a.subprjid='EB2009050412398898142851954589888'
lqsmn613 2010-01-12
  • 打赏
  • 举报
回复
查出问题,select aa.*,yearachieve,yearmaterial,yeardue 这里面没有判断下是否为0
风云乍起 2010-01-12
  • 打赏
  • 举报
回复
呵呵……

建议你分开写,分段查询……
lqsmn613 2010-01-12
  • 打赏
  • 举报
回复
人呢??????????????人呢??????????????人呢??????????????
lqsmn613 2010-01-11
  • 打赏
  • 举报
回复
这个问题已解决,还有另外个问题;

select aa.*,yearachieve,yearmaterial,yeardue from
(
select b.subprjid,sum(b.achieve) as lastachieve,sum(b.material) as lastmaterial,sum(b.due) as lastdue
,sum(isnull(CAST(b.dkkcl AS FLOAT),0)) as lastdkkcl
,sum(isnull(CAST(b.dkkfk AS FLOAT),0)) as lastdkkfk
,sum(isnull(CAST(b.dkksdf AS FLOAT),0)) as lastdkksdf
,sum(isnull(CAST(b.dkkst AS FLOAT),0)) as lastdkkst
,sum(isnull(CAST(b.dkkqt AS FLOAT),0)) as lastdkkqt
,sum(isnull(CAST(b.other AS FLOAT),0)) as lastother
,sum(isnull(CAST(b.obligate AS FLOAT),0)) as lastobliget
from T_SUBCONTRACT_SUBFINISHPRODUCTION as b
where b.subprjid='EB2009050412398898142851954589888' and b.yyyy<'2010'
group by b.subprjid
) aa left join
(
select a.subprjid,sum(isnull(CAST(a.achieve AS FLOAT),0)) as yearachieve
,sum(isnull(a.material,0)) as yearmaterial
,sum(isnull(a.due,0)) as yeardue
from T_SUBCONTRACT_SUBFINISHPRODUCTION as a
where a.subprjid='EB2009050412398898142851954589888' and a.yyyy='2010'
group by a.subprjid
) bb on aa.subprjid = bb.subprjid


以上代码中,红色部分与后面相应的显示的值,怎么会是null呢?不是赋予一个‘0’了吗?
上面b里面的那个isnull方法可以,红色那却不可以了,为什么?
lqsmn613 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mxm_1123 的回复:]
改为:
where (b.subprjid='EB2009050412398898142851954589888' and b.yyyy+'-'+b.mm <'2010-01')  or (a.yyyy='2010' and a.subprjid='EB2009050412398898142851954589888')
group by b.subprjid
[/Quote]

你的方法虽然有了,但是取到的数据部正确了。
mxm_1123 2010-01-11
  • 打赏
  • 举报
回复
改为:
where (b.subprjid='EB2009050412398898142851954589888' and b.yyyy+'-'+b.mm <'2010-01') or (a.yyyy='2010' and a.subprjid='EB2009050412398898142851954589888')
group by b.subprjid
mxm_1123 2010-01-11
  • 打赏
  • 举报
回复
where b.subprjid='EB2009050412398898142851954589888' and b.yyyy+'-'+b.mm<'2010-01' and a.yyyy='2010' and a.subprjid='EB2009050412398898142851954589888'
group by b.subprjid
改为:
where (b.subprjid='EB2009050412398898142851954589888' and b.yyyy+'-'+b.mm<'2010-01') a.yyyy='2010' (and a.subprjid='EB2009050412398898142851954589888')
group by b.subprjid
dong502 2010-01-11
  • 打赏
  • 举报
回复
or a.yyyy='2010'

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧