SQLserver查询问题,DISTINCT去重之后,还是有重复值

因为同一个字段对应的另一个字段有两条记录,导致我只想统计不同数据却有两条重复的,我该如何只取一条,不多说,直接上图。企业微信截图_20210728142211.png原本SQL是这样的:

SELECT DISTINCT TSI.FLOT,

TSI.FLOT_TEXT,

TS.FBILLNO,

TBM.FNUMBER,

TBM.FOLDNUMBER,

TSI.FID,

TSI.FENTRYID,

TSI.FMATERIALID,

TSI.FREALQTY,

TF.FPRICE

FROM T_STK_INSTOCKENTRY TSI 

LEFT JOIN T_STK_INSTOCK TS ON TSI.FID=TS.FID

LEFT JOIN T_BD_MATERIAL TBM ON TSI.FMATERIALID=TBM.FMATERIALID

LEFT JOIN T_STK_INSTOCKENTRY_F TF ON TSI.FENTRYID=TF.FENTRYID

WHERE EXISTS (SELECT TAO.FLOT FROM T_AR_RECEIVABLEENTRY_O TAO WHERE TAO.FLOT=TSI.FLOT)AND TSI.FLOT!=''

出现了四五条如图一样有两条记录的数据,该怎么写才能让他们不重复,我只要每个编号对应一条。企业微信截图_20210728143008.png这是我写的SQL,会出现重复的,极个别因为销售员录入信息的操作不当,导致的不同价格公用一个编号企业微信截图_20210728165957.png其实这样就出来的结果是对的,不过重复的数据他会只选一条,比如重复的字段中价格一个是500一个是600,通过ROWNUMBER只取了500的这条数据,但是领导的意思是只取一条,但是价格要平均,意思就是要价格的字段显示550,其他不变

用户zM8pH9695594 发布于 2021-7-28 14:28 (编辑于 2021-7-28 17:02)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-7-28 17:13(编辑于 2021-7-28 17:35)

image.png

SELECT 

A.FLOT,

A.FLOT_TEXT,

A.FBILLNO,

A.FNUMBER,

A.FOLDNUMBER,

A.FID,

A.FENTRYID,

A.FMATERIALID,

A.FREALQTY,

AVG(A.FPRICE) [FPRICE]

FROM (

SELECT DISTINCT TSI.FLOT,

TSI.FLOT_TEXT,

TS.FBILLNO,

TBM.FNUMBER,

TBM.FOLDNUMBER,

TSI.FID,

TSI.FENTRYID,

TSI.FMATERIALID,

TSI.FREALQTY,

TF.FPRICE

FROM T_STK_INSTOCKENTRY TSI 

LEFT JOIN T_STK_INSTOCK TS ON TSI.FID=TS.FID

LEFT JOIN T_BD_MATERIAL TBM ON TSI.FMATERIALID=TBM.FMATERIALID

LEFT JOIN T_STK_INSTOCKENTRY_F TF ON TSI.FENTRYID=TF.FENTRYID

WHERE EXISTS (SELECT TAO.FLOT FROM T_AR_RECEIVABLEENTRY_O TAO WHERE TAO.FLOT=TSI.FLOT)AND TSI.FLOT!=''

) A

GROUP BY A.FLOT,

A.FLOT_TEXT,

A.FBILLNO,

A.FNUMBER,

A.FOLDNUMBER,

A.FID,

A.FENTRYID,

A.FMATERIALID,

A.FREALQTY

  • 用户zM8pH9695594 用户zM8pH9695594(提问者) SELECT A.FLOT, A.FLOT_TEXT, A.FBILLNO, A.FNUMBER, A.FOLDNUMBER, A.FID, A.FENTRYID, A.FMATERIALID, A.FREALQTY, AVG(A.FPRICE) [FPRICE] FROM ( SELECT DISTINCT TSI.FLOT, TSI.FLOT_TEXT, TS.FBILLNO, TBM.FNUMBER, TBM.FOLDNUMBER, TSI.FID, TSI.FENTRYID, TSI.FMATERIALID, TSI.FREALQTY, TF.FPRICE FROM T_STK_INSTOCKENTRY TSI LEFT JOIN T_STK_INSTOCK TS ON TSI.FID=TS.FID LEFT JOIN T_BD_MATERIAL TBM ON TSI.FMATERIALID=TBM.FMATERIALID LEFT JOIN T_STK_INSTOCKENTRY_F TF ON TSI.FENTRYID=TF.FENTRYID WHERE EXISTS (SELECT TAO.FLOT FROM T_AR_RECEIVABLEENTRY_O TAO WHERE TAO.FLOT=TSI.FLOT)AND TSI.FLOT!=\'\' ) A where A.FLOT_TEXT=\'0058202104230019\' GROUP BY A.FLOT, A.FLOT_TEXT, A.FBILLNO, A.FNUMBER, A.FOLDNUMBER, A.FID, A.FENTRYID, A.FMATERIALID, A.FREALQTY 这样显示还是两条数据
    2021-07-28 17:18 
  • Z4u3z1 Z4u3z1 回复 用户zM8pH9695594(提问者) where A.FLOT_TEXT=\\\'0058202104230019\\\' 这个放子查询里面去,及 “) A”前面
    2021-07-28 17:21 
  • 用户zM8pH9695594 用户zM8pH9695594(提问者) 回复 Z4u3z1 这不关事的,0058202104230019是之前我查出来重复的编号,0058202104230019这个编号存在两条记录,价格不同其他都相同。我需要再只取一条记录的前提下,把价格取平均值,相当于0058202104230019这个字段的数据 select*,AVG(价格)这个意思
    2021-07-28 17:25 
  • Z4u3z1 Z4u3z1 回复 用户zM8pH9695594(提问者) 你的FID,FENTRYID,FBIUNO也是不同的嘛
    2021-07-28 17:37 
  • 用户zM8pH9695594 用户zM8pH9695594(提问者) 回复 Z4u3z1 我靠。。得把不同的全部去掉
    2021-07-28 17:40 
最佳回答
0
JackRenLv6初级互助
发布于2021-7-28 14:43(编辑于 2021-7-29 08:12)

...........

最佳回答
0
axingLv6专家互助
发布于2021-7-28 14:44

价格既然不同,distinct就无法去重

你可以这样想,如果非要它去重,它应该保留哪一条呢?

如果我们只想保留价格最大的那条,那么可以改为

SELECT 

TSI.FLOT,

TSI.FLOT_TEXT,

TS.FBILLNO,

TBM.FNUMBER,

TBM.FOLDNUMBER,

TSI.FID,

TSI.FENTRYID,

TSI.FMATERIALID,

TSI.FREALQTY,

max(TF.FPRICE) as FPRICE

FROM T_STK_INSTOCKENTRY TSI 

LEFT JOIN T_STK_INSTOCK TS ON TSI.FID=TS.FID

LEFT JOIN T_BD_MATERIAL TBM ON TSI.FMATERIALID=TBM.FMATERIALID

LEFT JOIN T_STK_INSTOCKENTRY_F TF ON TSI.FENTRYID=TF.FENTRYID

WHERE EXISTS (SELECT TAO.FLOT FROM T_AR_RECEIVABLEENTRY_O TAO WHERE TAO.FLOT=TSI.FLOT)AND TSI.FLOT!=''

group by

TSI.FLOT,

TSI.FLOT_TEXT,

TS.FBILLNO,

TBM.FNUMBER,

TBM.FOLDNUMBER,

TSI.FID,

TSI.FENTRYID,

TSI.FMATERIALID,

TSI.FREALQTY

image.png

  • 用户zM8pH9695594 用户zM8pH9695594(提问者) 你写的这个编号还是出现重复的。。
    2021-07-28 15:11 
  • axing axing 回复 用户zM8pH9695594(提问者) 前面也要字段不同值,没留意......
    2021-07-28 15:33 
  • 3关注人数
  • 983浏览人数
  • 最后回答于:2021-7-29 08:12
    请选择关闭问题的原因
    确定 取消
    返回顶部