sql子查询字段选择条件

SkyLee708 2017-07-25 08:28:11
select 
业务员,
仓库,
sum(本地库数量SPSL) 本地库出库吨数,
sum(直发库数量SPSL) 直发库出库吨数
from (
select *
from
(select
y.ywbh,
y.ywxm 业务员,
w.ckbh 仓库编号,
ckmc 仓库,
isnull((select top 1 SPSL from xsjsb where w.ckbh!=1004 ),0) 本地库数量SPSL, //
isnull((select top 1 SPSL from xsjsb where w.ckbh=1004 ),0) 外地库数量SPSL //如何实现select SPSL from xsjsb where w.ckbh=1004

From
xsjsb w left join xsjs t on w.link=t.link
left join d_sp s on s.spbh=w.spbh
left join d_ywy y on t.ywbh=y.ywbh
left join d_bm b on t.bmbh=b.bmbh
left join d_ck ck on ck.ckbh=w.ckbh
left join d_czy zd on zd.czbh=t.zdrm
left join d_czy fh on fh.czbh=t.fhrm
left join d_czy jz on jz.czbh=t.jzrm

where
rq>= '[开始日期,DATE]' and rq<= '[结束日期,DATE]'
)a
)b group by 业务员





在 isnull((select top 1 SPSL from xsjsb where w.ckbh=1004 ),0) 外地库数量SPSL
如何实现select SPSL from xsjsb where w.ckbh=1004的效果,用top1,整个字段就一个值
...全文
429 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SkyLee708 2017-07-27
  • 打赏
  • 举报
回复
引用 7 楼 RINK_1 的回复:
select 业务员, sum(本地库数量SPSL) 本地库出库吨数, sum(外地库数量SPSL) 直发库出库吨数 from ( select y.ywbh, y.ywxm 业务员, w.ckbh 仓库编号, ckmc 仓库, isnull(case when ckbh!=1004 then SPSL else 0 end,0) as 本地库数量SPSL, isnull(case when ckbh=1004 then SPSL else 0 end,0) as 外地库数量SPSL From xsjsb w left join xsjs t on w.link=t.link left join d_sp s on s.spbh=w.spbh left join d_ywy y on t.ywbh=y.ywbh left join d_bm b on t.bmbh=b.bmbh left join d_ck ck on ck.ckbh=w.ckbh left join d_czy zd on zd.czbh=t.zdrm left join d_czy fh on fh.czbh=t.fhrm left join d_czy jz on jz.czbh=t.jzrm where rq>= '[开始日期,DATE]' and rq<= '[结束日期,DATE]' )b group by 业务员
感谢,感谢,就是这个效果。
RINK_1 2017-07-26
  • 打赏
  • 举报
回复
select 业务员, sum(本地库数量SPSL) 本地库出库吨数, sum(外地库数量SPSL) 直发库出库吨数 from ( select y.ywbh, y.ywxm 业务员, w.ckbh 仓库编号, ckmc 仓库, isnull(case when ckbh!=1004 then SPSL else 0 end,0) as 本地库数量SPSL, isnull(case when ckbh=1004 then SPSL else 0 end,0) as 外地库数量SPSL From xsjsb w left join xsjs t on w.link=t.link left join d_sp s on s.spbh=w.spbh left join d_ywy y on t.ywbh=y.ywbh left join d_bm b on t.bmbh=b.bmbh left join d_ck ck on ck.ckbh=w.ckbh left join d_czy zd on zd.czbh=t.zdrm left join d_czy fh on fh.czbh=t.fhrm left join d_czy jz on jz.czbh=t.jzrm where rq>= '[开始日期,DATE]' and rq<= '[结束日期,DATE]' )b group by 业务员
SkyLee708 2017-07-26
  • 打赏
  • 举报
回复
引用 3 楼 ch21st 的回复:
1. 仓库应该出现在Group By中 2.内部的子查询需要带入参数也可以用outer apply 里 有点看不懂你的逻辑,你的两个求数量的子查询,其实只有两个值,xsjsb w 的w.ckbh=1004一个值和w.ckbh!=1004是一个值 外面取和是什么含义(都是对应值和对应记录数的乘积)

select 
        业务员,
    sum(本地库数量SPSL) 本地库出库吨数,
    sum(直发库数量SPSL) 直发库出库吨数
from (
    select 
            y.ywbh,
            y.ywxm 业务员,
            w.ckbh 仓库编号,
            ckmc 仓库,
            isnull(l.本地库数量SPSL,0) 本地库数量SPSL,  //
            isnull(o.外地库数量SPSL,0)   外地库数量SPSL  //如何实现select SPSL from xsjsb where w.ckbh=1004

    From xsjsb w 
         left join xsjs t on w.link=t.link
         left join d_sp s on s.spbh=w.spbh
         left join d_ywy y on t.ywbh=y.ywbh
         left join d_bm b on t.bmbh=b.bmbh
         left join d_ck ck on ck.ckbh=w.ckbh
         left join d_czy zd on zd.czbh=t.zdrm
         left join d_czy fh on fh.czbh=t.fhrm
         left join d_czy jz on jz.czbh=t.jzrm
         cross join (select top 1 SPSL as 本地库数量SPSL from xsjsb where ckbh!=1004 ) l
         cross join (select top 1 SPSL as 外地库数量SPSL from xsjsb where ckbh=1004 ) o
    where 
    rq>= '[开始日期,DATE]' and rq<= '[结束日期,DATE]' 

)b group by 业务员
这样可以运行了,最开始贴的代码有问题,不需要仓库字段,就是汇总每个业务员的时间区间内两个仓库的总和。 虽然可以运行了,但结果的数值不对,不知道哪里有问题。
SkyLee708 2017-07-26
  • 打赏
  • 举报
回复
引用 3 楼 ch21st 的回复:
1. 仓库应该出现在Group By中 2.内部的子查询需要带入参数也可以用outer apply 里 有点看不懂你的逻辑,你的两个求数量的子查询,其实只有两个值,xsjsb w 的w.ckbh=1004一个值和w.ckbh!=1004是一个值 外面取和是什么含义(都是对应值和对应记录数的乘积)

select 
        业务员,
        仓库,
    sum(本地库数量SPSL) 本地库出库吨数,
    sum(直发库数量SPSL) 直发库出库吨数
from (
    select 
            y.ywbh,
            y.ywxm 业务员,
            w.ckbh 仓库编号,
            ckmc 仓库,
            isnull(l.本地库数量SPSL,0) 本地库数量SPSL,  //
            isnull(o.外地库数量SPSL,0)   外地库数量SPSL  //如何实现select SPSL from xsjsb where w.ckbh=1004

    From xsjsb w 
         left join xsjs t on w.link=t.link
         left join d_sp s on s.spbh=w.spbh
         left join d_ywy y on t.ywbh=y.ywbh
         left join d_bm b on t.bmbh=b.bmbh
         left join d_ck ck on ck.ckbh=w.ckbh
         left join d_czy zd on zd.czbh=t.zdrm
         left join d_czy fh on fh.czbh=t.fhrm
         left join d_czy jz on jz.czbh=t.jzrm
         outer apply (select top 1 SPSL as 本地库数量SPSL from xsjsb where w.ckbh!=1004 ) l
         outer apply (select top 1 SPSL as 外地库数量SPSL from xsjsb where w.ckbh=1004 ) o
    where 
    rq>= '[开始日期,DATE]' and rq<= '[结束日期,DATE]' 

)b group by 业务员,仓库
sql2000的数据库 ,不支持 apply
SkyLee708 2017-07-26
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
xsjsb 表和外边的那些表有什么可以关联的吗?还是说随便读取一条,只要不重复就可以?
没有和外表关联的,不是随便读取一条数据, 是要实现select SPSL from xsjsb where w.ckbh=1004 和 select SPSL from xsjsb where w.ckbh!=1004 同一字段取两个不同条件的数据,然后求和汇总。
道素 2017-07-26
  • 打赏
  • 举报
回复
1. 仓库应该出现在Group By中 2.内部的子查询需要带入参数也可以用outer apply 里 有点看不懂你的逻辑,你的两个求数量的子查询,其实只有两个值,xsjsb w 的w.ckbh=1004一个值和w.ckbh!=1004是一个值 外面取和是什么含义(都是对应值和对应记录数的乘积)

select 
        业务员,
        仓库,
    sum(本地库数量SPSL) 本地库出库吨数,
    sum(直发库数量SPSL) 直发库出库吨数
from (
    select 
            y.ywbh,
            y.ywxm 业务员,
            w.ckbh 仓库编号,
            ckmc 仓库,
            isnull(l.本地库数量SPSL,0) 本地库数量SPSL,  //
            isnull(o.外地库数量SPSL,0)   外地库数量SPSL  //如何实现select SPSL from xsjsb where w.ckbh=1004

    From xsjsb w 
         left join xsjs t on w.link=t.link
         left join d_sp s on s.spbh=w.spbh
         left join d_ywy y on t.ywbh=y.ywbh
         left join d_bm b on t.bmbh=b.bmbh
         left join d_ck ck on ck.ckbh=w.ckbh
         left join d_czy zd on zd.czbh=t.zdrm
         left join d_czy fh on fh.czbh=t.fhrm
         left join d_czy jz on jz.czbh=t.jzrm
         outer apply (select top 1 SPSL as 本地库数量SPSL from xsjsb where w.ckbh!=1004 ) l
         outer apply (select top 1 SPSL as 外地库数量SPSL from xsjsb where w.ckbh=1004 ) o
    where 
    rq>= '[开始日期,DATE]' and rq<= '[结束日期,DATE]' 

)b group by 业务员,仓库
二月十六 版主 2017-07-25
  • 打赏
  • 举报
回复
xsjsb 表和外边的那些表有什么可以关联的吗?还是说随便读取一条,只要不重复就可以?
RINK_1 2017-07-25
  • 打赏
  • 举报
回复
CASE WHEN w.ckbh=1004 THEN SPSL ELSE NULL END

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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