这个问题应该如何解决

image.png

select ap.dVouchDate as 单据日期,ap.cPZNum as 凭证编号,case bStartFlag when 1 then '期初余额'   end as 摘要/*数据属性*/,ap.cDwCode as 供应商编码,ap.cVouchID as 票据号,ap.cVouchType as 票据类型,ap.cexch_name as 币种,ap.iAmount as 期初余额,ap.cFlag as 应收应付标志,ap.cOperator as 操作人,ap.bStartFlag as 期初标志

from Ap_Vouch ap

where bStartFlag=1/*期初余额表,数据正确*/

union all

select pb.dpbvdate as 开票日期,pbs.cPZNum as 凭证号,pb.cPBVMemo as 摘要,sum(isum)as 本期应付 /*本期应付*/ ,pb.cVenCode as 供应商编码,cPBVCode as 单据号 ,pb.cPBVVerifier as 审核人,cPBVMaker as 制单人,pb.cPBVCode as 订单号,pb.dGatheringDate as 到期日,pbs.PBVID as 采购发票号

from PurBillVouch pb,PurBillVouchs pbs,Vendor v

where pb.pbvid=pbs.PBVID and pb.cVenCode=v.cvencode

group by cPBVCode,pb.cPBVMemo ,pbs.cPZNum ,pb.cVenCode ,pb.cPBVVerifier ,cPBVMaker ,pb.cPBVCode ,pb.dGatheringDate ,pbs.PBVID,dpbvdate/*发票*/

union all

select ap.dvouchdate as 票据日期,ap.cVouchID as 单据号,ap.cdigest as 摘要,aps.iApplyAmt as 本期付款申请金额 ,case cVouchType when 'AP40' then '付款申请单'end as 票据类型, ap.cdwcode as 供应商编码,v.cVenName as 供应商名称,ap.cexch_name as 币种,ss.cSSName as 结算方式,ap.cCheckMan as 检查人,ap.cFlag

from AP_ApplyPayVouch ap,AP_ApplyPayVouchs aps,Vendor v,SettleStyle ss

where ap.PID=aps.pid and ap.cDwCode=v.cVenCode and ap.cSSCode=ss.cSSCode/*付款申请表*/

zhangjinrui 发布于 2021-10-21 14:16
1min目标场景问卷 立即参与
回答问题
悬赏:5 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
zhangjinruiLv2见习互助
发布于2021-10-21 17:07

先把每个要union 的表单独拿出来,一个个去对照字段顺序

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-10-21 14:19(编辑于 2021-10-21 14:28)

image.png

把money转化成char瑟 convert(nvarchar(50),字段名称)

image.png

  • zhangjinrui zhangjinrui(提问者) 我不知道谁是money类型的
    2021-10-21 14:23 
  • Z4u3z1 Z4u3z1 回复 zhangjinrui(提问者) 我们跟不知道,只有猜。 看补充图自己找
    2021-10-21 14:28 
最佳回答
0
StudyYLLv6初级互助
发布于2021-10-21 14:40

你union all时每个查询的列的顺序要一致的吧,列数要统一的吧,对应的列的类型要一样的吧。

你这明显不对。而且你第一个查询都筛选出bStartFlag=1了,就没必要case when了,直接"期初余额"as 摘要image.png

  • zhangjinrui zhangjinrui(提问者) 我的意思是,需要将bStartFlag=1的数据列的内容全部替换成期初余额
    2021-10-21 14:50 
  • zhangjinrui zhangjinrui(提问者) sum这个求和函数应该也要对应求和函数吗
    2021-10-21 14:51 
  • StudyYL StudyYL 回复 zhangjinrui(提问者) 但是都where bStartFlag=1 了那查出来不都是1吗?所以直接\"期初余额\"也是一样的
    2021-10-21 15:00 
  • StudyYL StudyYL 回复 zhangjinrui(提问者) 不一定要对应求和函数,但你必须列出对应的列,并且该列的类型要和你求和的那个类型一致
    2021-10-21 15:01 
  • StudyYL StudyYL 回复 zhangjinrui(提问者) UNION 内部的 SELECT 语句必须拥有相同数量的列; 列也必须拥有相似的数据类型(实际非必须); 同时,每条 SELECT 语句中列的顺序必须相同
    2021-10-21 15:03 
  • 1关注人数
  • 392浏览人数
  • 最后回答于:2021-10-21 17:07
    请选择关闭问题的原因
    确定 取消
    返回顶部