我 是新手,刚 接触到SQL查询语句,感觉蛮有意思的,如果学的好,可以大大提高工作效率。我要实现的查询目标是查询某 个纳 税 人某一时期内的入 库 税 额合计,包括增 值 税 合计,企业所 得 税 合计,消 费 税合计。征 收 项 目代码(zsxm_dm)01是增 值 税,03是消 费 税,04是企 业 所 得 税,但是有的纳 税 人 核定 税 种时,可能只有 增 值 税和企 业 所 得 税,那么我通过下面的语句就能实现:
SELECT
t1.nsrsbh,t1.nsrmc,sum(t1.zzs) as zzshj, sum(t2.qysds) as qysdshj
FROM (SELECT
a.nsrsbh,b.nsrmc, c.zsxm_mc,sum(a.se) as zzs FROM sb_zsxx a, dj_nsrxxb,dm_zsxm c
WHERE a.nsrsbh='130000063135586'
anda.nsrsbh=b.nsrsbh
anda.zsxm_dm=c.zsxm_dm
andc.zsxm_dm=01
anda.rkrq>=to_date('2014-01-01', 'yyyy-mm-dd')
anda.rkrq<=to_date('2014-09-30', 'yyyy-mm-dd')
group by a.nsrsbh,b.nsrmc,c.zsxm_mc) t1, (SELECT
a.nsrsbh,b.nsrmc, c.zsxm_mc,sum(a.se) as qysds FROM sb_zsxx a, dj_nsrxxb,dm_zsxm c
WHERE a.nsrsbh='130000063135586'
anda.nsrsbh=b.nsrsbh
anda.zsxm_dm=c.zsxm_dm
andc.zsxm_dm=04
anda.rkrq>=to_date('2014-01-01', 'yyyy-mm-dd')
anda.rkrq<=to_date('2014-09-30', 'yyyy-mm-dd')
group by a.nsrsbh,b.nsrmc,c.zsxm_mc) t2
WHERE t1.nsrsbh='130000063135586'
and t1.nsrsbh=t2.nsrsbh
group by t1.nsrsbh,t1.nsrmc
结果如下:
Nsrsbh Nsrmc Zzshj Qysdshj
130000063135586 千里赤诚设备制造有限公司 92927.87 60897.49
现在的问题是如果某个纳 税 人没有核定企 业 所 得 税 税 种,例如另外一个纳 税 人只有增 值 税和消 费 税,当你改变 纳 税 人识别号(nsrsbh)查询时,也不提示语句错误,但是显示是空记录,查询的结果就是下面的:
Nsrsbh Nsrmc Zzshj Qysdshj
为什么不显示增 值 税 额呢?
如何实现某个 纳 税 人在某个时期的 增 值 税 合计、企业所 得 税合计和消 费 税 合计,如果有就显示,没有就显示空值,还有如何显示某个 纳 税 人的 税 额 总合计(增 值 税+企 业 所 得 税+消 费 税)。另外上面语句可能有点啰嗦,但是我不会优化,现在能显示感觉已经幸福了。
------解决思路----------------------
你把你用的表结构发出来, 元数据贴出来,或者自己构建一个测试数据。然后写自己要的结果。
------解决思路----------------------
SELECT
nsrsbh
,SUM(CASE zsxm_dm WHEN'01'THEN se END) Nsrmc
,SUM(CASE zsxm_dm WHEN'03'THEN se END) Zzshj
,SUM(CASE zsxm_dm WHEN'04'THEN se END) Qysdshj
,SUM(se) [合计]
FROM
sb_zsxx
WHERE
nsrsbh=‘130000063135586’
AND rkrq>='2014-01-01'
AND rkrq<'2014-10-01'
GROUP BY
nsrsbh