这个问题怎么解决啊,高手帮忙啊!

kevin_xcheung 2007-01-14 02:51:38
有条SQL如下:
select Distinct WorkPhase '制程', ModelNo '机种', BoardOfFiner '检验总数', BoardOfBad '不良数', (BoardOfFiner * CheckNum) '检验总点数',BCheckNadd '不良点数',Cast((BoardOfBad * 100.00/BoardOfFiner) as decimal(10,2 )) '不良率(%)',Cast(100-(BoardOfBad * 100.00/BoardOfFiner) as decimal(10,2 )) '直通率(%)',Cast(BCheckNadd * 1000000/(BoardOfFiner * CheckNum) as decimal(10,2)) 'DPPM' from tmp_ResultOfRate where WorkPhase <> 'PCK' Group by WorkPhase,ModelNo,BoardOfFiner,BoardOfBad,CheckNum,BCheckNadd

跑出的结果如下:
SMT BD336021LF(FX5200) 332 1 122840 1 .30 99.70 8.00
SMT BD349320LF(GF6200TC) 2539 16 952125 19 .63 99.37 19.00
SMT BD3598 1335 10 640800 15 .75 99.25 23.00
SMT BD359821LF(GF7100GS) 7 0 3360 NULL .00 100.00 NULL
SMT BD359821LF(GF7100GS) 69 0 33120 NULL .00 100.00 NULL
SMT BD359821LF(GF7100GS) 650 21 312000 31 3.23 96.77 99.00
SMT BD359821LF(GF7100GS) 1532 7 735360 9 .46 99.54 12.00
SMT BD363810LF(GF7300GT) 1 0 808 NULL .00 100.00 NULL
TET BD349320LF(GF6200TC) 703 4 11248 4 .57 99.43 355.00
TET BD357220LF(ATIX1300LE) 10 1 100 1 10.00 90.00 10000.00
TET BD359810LF(GF7300LE) 1 0 11 NULL .00 100.00 NULL
TET BD359810LF(GF7300LE) 2 2 22 3 100.00 .00 136363.00
TET BD359810LF(GF7300LE) 6 0 66 NULL .00 100.00 NULL
TET BD359810LF(GF7300LE) 27 3 297 5 11.11 88.89 16835.00
TET BD359810LF(GF7300LE) 94 1 1034 1 1.06 98.94 967.00
TET BD359821LF 103 1 1133 NULL .97 99.03 NULL
TET BD359821LF 158 1 1738 1 .63 99.37 575.00
TET BD359821LF(GF7100GS) 1 0 11 NULL .00 100.00 NULL
TET BD359821LF(GF7100GS) 1 1 12 3 100.00 .00 250000.00
TET BD359821LF(GF7100GS) 2 2 24 6 100.00 .00 250000.00
TET BD359821LF(GF7100GS) 31 5 341 8 16.13 83.87 23460.00
TET BD359821LF(GF7100GS) 40 0 480 NULL .00 100.00 NULL
TET BD359821LF(GF7100GS) 1783 7 19613 7 .39 99.61 356.00
TET BD359821LF(GF7100GS) 3650 24 40150 17 .66 99.34 423.00
TET BD363810LF(GF7300GT) 2 0 26 NULL .00 100.00 NULL
TET BD363810LF(GF7300GT) 7 1 91 1 14.29 85.71 10989.00
但是这个结果不是我想要的,怎么样才能把第二列" ModelNo '机种'"重复的项合并!后面几列中的数据也累加进去.怎么改这个SQL啊!
...全文
180 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
窝抓了个羊 2007-01-14
  • 打赏
  • 举报
回复
看不懂,还是没有说明白后面怎么求和!要怎么样的条件~
kevin_xcheung 2007-01-14
  • 打赏
  • 举报
回复

原始数据:

制程 机种 检验总数 不良数 检验总点数 不良点数 不良率(%) 直通率(%)
SMT BD336021LF(FX5200) 332 1 122840 1 0.3 99.7
SMT BD349320LF(GF6200TC) 2539 16 952125 19 0.63
SMT BD359821LF(GF7100GS) 7 0 3360 0
SMT BD359821LF(GF7100GS) 69 0 33120 0
SMT BD359821LF(GF7100GS) 650 21 312000 31 3.23
SMT BD359821LF(GF7100GS) 1532 7 735360 9 0.46
SMT BD363810LF(GF7300GT) 1 0 808 0
TET BD349320LF(GF6200TC) 703 4 11248 4 0.57
TET BD357220LF(ATIX1300LE) 10 1 100 1 10
TET BD359810LF(GF7300LE) 1 0 11 0
TET BD359810LF(GF7300LE) 2 2 22 3 100
TET BD359810LF(GF7300LE) 6 0 66 0
TET BD359810LF(GF7300LE) 27 3 297 5 11.11
TET BD359810LF(GF7300LE) 94 1 1034 1 1.06
TET BD359821LF 103 1 1133 0.97 99.03
TET BD359821LF 158 1 1738 1 0.63 99.37
TET BD359821LF(GF7100GS) 1 0 11 0
TET BD359821LF(GF7100GS) 1 1 12 3 100
TET BD359821LF(GF7100GS) 2 2 24 6 100
TET BD359821LF(GF7100GS) 31 5 341 8 16.13
TET BD359821LF(GF7100GS) 40 0 480 0
TET BD359821LF(GF7100GS) 1783 7 19613 7 0.39
TET BD359821LF(GF7100GS) 3650 24 40150 17 0.66
TET BD363810LF(GF7300GT) 2 0 26 0
TET BD363810LF(GF7300GT) 7 1 91 1 14.29

得出的结果数据:
SMT BD336021LF(FX5200) 332 1 122840 1 0.3 99.7
SMT BD349320LF(GF6200TC) 2539 16 952125 19 0.63
SMT BD359821LF(GF7100GS) 2258 28 3360 20 0
SMT BD363810LF(GF7300GT) 1 0 808 9 0
TET BD349320LF(GF6200TC) 703 4 11248 4 0.5
TET BD357220LF(ATIX1300LE) 10 1 100 1 10
TET BD359810LF(GF7300LE) 1 0 11 0
. .
. .
. .
也就是把将同一个"制程"下的相同"机种"求和,同时将后面的数据也求和,最终达到让用户看到的结果更直接,而不是生成报表以后又要让人家手动把相同类别的产品相加 求和.
不知道我这样描述大家能不能听懂,不过还是很感谢大家!
kevin_xcheung 2007-01-14
  • 打赏
  • 举报
回复
这么求和还是不行.我再往清楚里描述一下吧!
谢谢各位的热情帮助!
窝抓了个羊 2007-01-14
  • 打赏
  • 举报
回复
select Distinct WorkPhase '制程', ModelNo '机种', SUM(BoardOfFiner) '检验总数', SUM(BoardOfBad) '不良数', SUM((BoardOfFiner * CheckNum)) '检验总点数',SUM(BCheckNadd) '不良点数',SUM(Cast((BoardOfBad * 100.00/BoardOfFiner) as decimal(10,2 ))) '不良率(%)',SUM(Cast(100-(BoardOfBad * 100.00/BoardOfFiner) as decimal(10,2 ))) '直通率(%)',SUM(Cast(BCheckNadd * 1000000/(BoardOfFiner * CheckNum) as decimal(10,2))) 'DPPM' from tmp_ResultOfRate where WorkPhase <> 'PCK' Group by WorkPhase,ModelNo,BoardOfFiner,BoardOfBad,CheckNum,BCheckNadd

不知道是不是你要的结果,在这里你的合并我认为是求和。如果有NULL的列,你自己再加一个
ISNULL(列名,0)再求和就可以了。
bugchen888 2007-01-14
  • 打赏
  • 举报
回复
lz最好贴出原始数据和最后想得到的结果。
bugchen888 2007-01-14
  • 打赏
  • 举报
回复
不明白
kevin_xcheung 2007-01-14
  • 打赏
  • 举报
回复
制程 机种 检验总数 不良数 检验总点数 不良点数 ....
SMT BD357220LF(ATIX1300LE) 10 1 100 1 10.00 90.00 10000.00
TET BD359810LF(GF7300LE) 1 0 11 NULL 0 100.00 NULL
TET BD359810LF(GF7300LE) 2 2 22 3 100.00 0 NULL
TET BD359810LF(GF7300LE) 6 0 66 NULL 0 0 11
上面2,3,4三行中第二列" BD359810LF(GF7300LE)"是同一种产品,所以我要求将其合并.但不是单纯的合并,要将后面几列的数据也合并.我要算不良率百分比,所以将同类型的产品即"机种"合并的结果数据会更准确.也就是第一列"制程"不用合并叫他自然显示,后面只要"机种"名称完全相同的都将其合并并且后面的所有列也合并.

非常这位大哥的指点,将不甚感激哦!

窝抓了个羊 2007-01-14
  • 打赏
  • 举报
回复
数据太乱,摆放整齐一些,可能会更快帮到你。

34,576

社区成员

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

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