查询代码: select PTD.PTHNUM_0, case when GE.SNS_0 = -1 then -ABS(AMTCUR_0) else AMTCUR_0 end VARI, PD.POHNUM_0, PE.ACCDAT_0 A, PD.NUM_0, PD.TSICOD_0, IR.ITMREF_0, D.TEXTE_0, AA.TEXTE_0, PTD.NETCUR_0, PD.LINCSTPUR_0, PTD.LINCSTPUR_0, PD.QTYSTU_0, PTD.QTYSTU_0 from GACCENTRYD GE left join GACCENTRY GY on GE.NUM_0 = GY.NUM_0 left join PRECEIPTD PTD on GY.BPRVCR_0 = PTD.PTHNUM_0 left join PINVOICED PD on PTD.PTHNUM_0 = PD.PTHNUM_0 LEFT JOIN PINVOICE PE ON PE.NUM_0=PD.NUM_0 LEFT JOIN PORDER PR ON PR.POHNUM_0=PTD.POHNUM_0 LEFT JOIN PORDERP PP ON PP.POHNUM_0=PTD.POHNUM_0 AND PTD.PTDLIN_0=PP.POPLIN_0 LEFT JOIN PORDERQ PQ ON PQ.POHNUM_0=PP.POHNUM_0 AND PQ.POPLIN_0=PP.POPLIN_0 AND PP.POPSEQ_0=PQ.POQSEQ_0 LEFT JOIN ITMMASTER IR ON IR.ITMREF_0=PD.ITMREF_0 LEFT JOIN ATEXTRA D ON IR.ITMREF_0=D.IDENT1_0 AND D.CODFIC_0='ITMMASTER' AND D.ZONE_0='DES1AXX'AND D.LANGUE_0='ENG' LEFT JOIN ATEXTRA AA ON IR.ITMREF_0=AA.IDENT1_0 AND AA.CODFIC_0='ITMMASTER' AND AA.ZONE_0='DES1AXX'AND AA.LANGUE_0='CHI' where GE.ACC_0 = '13012000' and PD.FCY_0='CH01' AND PD.PIVTYP_0<>'CNICC' AND PTD.CPY_0='SFL' ORDER BY PD.NUM_0
输出后如下图:
问题:红框中数据如何只显示一条?
distinct
select distinct PTD.PTHNUM_0, case when GE.SNS_0 = -1 then -ABS(AMTCUR_0) else AMTCUR_0 end VARI, PD.POHNUM_0, PE.ACCDAT_0 A, PD.NUM_0, PD.TSICOD_0, IR.ITMREF_0, D.TEXTE_0, AA.TEXTE_0, PTD.NETCUR_0, PD.LINCSTPUR_0, PTD.LINCSTPUR_0, PD.QTYSTU_0, PTD.QTYSTU_0 from GACCENTRYD GE left join GACCENTRY GY on GE.NUM_0 = GY.NUM_0 left join PRECEIPTD PTD on GY.BPRVCR_0 = PTD.PTHNUM_0 left join PINVOICED PD on PTD.PTHNUM_0 = PD.PTHNUM_0 LEFT JOIN PINVOICE PE ON PE.NUM_0=PD.NUM_0 LEFT JOIN PORDER PR ON PR.POHNUM_0=PTD.POHNUM_0 LEFT JOIN PORDERP PP ON PP.POHNUM_0=PTD.POHNUM_0 AND PTD.PTDLIN_0=PP.POPLIN_0 LEFT JOIN PORDERQ PQ ON PQ.POHNUM_0=PP.POHNUM_0 AND PQ.POPLIN_0=PP.POPLIN_0 AND PP.POPSEQ_0=PQ.POQSEQ_0 LEFT JOIN ITMMASTER IR ON IR.ITMREF_0=PD.ITMREF_0 LEFT JOIN ATEXTRA D ON IR.ITMREF_0=D.IDENT1_0 AND D.CODFIC_0='ITMMASTER' AND D.ZONE_0='DES1AXX'AND D.LANGUE_0='ENG' LEFT JOIN ATEXTRA AA ON IR.ITMREF_0=AA.IDENT1_0 AND AA.CODFIC_0='ITMMASTER' AND AA.ZONE_0='DES1AXX'AND AA.LANGUE_0='CHI' where GE.ACC_0 = '13012000' and PD.FCY_0='CH01' AND PD.PIVTYP_0<>'CNICC' AND PTD.CPY_0='SFL' ORDER BY PD.NUM_0
试过了,红框中的4条依旧存在
第一栏是什么数据
361,362。。。
我看你后面还有字段没显示出来。
distinct是针对所有字段值相同才有效,不是部分字段值相同
并不是所有值都相同的
所有说,去不了
只能从sql上解决
倒数第三列,有用吗。没有用的话,去掉,再用distinct就可以
红色圈中的数据重复的原因,是因为关联的表中错误一对多的关系
存在
可否给个条件,如果362.363,364行等于他们的值时,VARI显示0?
等于红框中内容时,VARI显示为0?
判断是要拿查询的列进行判断的。
那几个数字是列吗,
是的
那列?
case when GE.SNS_0 = -1 then -ABS(AMTCUR_0) else AMTCUR_0 end VARI,
你指的是哪几个数字
红框中的嘛
361,362,,
PD.LINCSTPUR_0,
PTD.LINCSTPUR_0,
类似于IF ,如果 (PD.LINCSTPUR_0 = '25486.2000000000000' and PTD.LINCSTPUR_0, = '573439.500000000') 那么VARI = 0
那你用if满足不了?
你是没明白你要的是什么啊,只是单纯的觉得他们重复了就想排除,你这样是问不到想要结果的,只有你弄明白了才能问到结果。
比如【如果 (PD.LINCSTPUR_0 = '25486.2000000000000' and PTD.LINCSTPUR_0, = '573439.500000000') 那么VARI = 0】
你是对361 362 这两行的是25486,573439这两个值是0,但是你其他行不一定是这两个值,你得有个通用的判断列,比如有两行371 372,这两个值 是1 和2,那你这个if是完全没有办法判断的
加我q吧,我帮你优化sql
1571488201