导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

一个查询语句计算的错误,请大锅们帮忙瞧一瞧败哪里有错?

bigwhiteshark 2003-12-22 11:35:16
--这是存储过程
IF object_id('tempdb..#Water') IS NULL
CREATE TABLE #Water
(
DeptProcName varchar(50),
EquName varchar(50),
OneDIWater numeric(10,2),
OneWater numeric(10,2),
TaiNumber int,
MidWater numeric(10,2),
AllWater numeric(10,2)
)
ELSE delete #Water --清空表

INSERT INTO #Water
SELECT Pub_DeptProcInfo.DeptProcName, Equ_EquInfo.EquName,
STR(AVG(Equ_EquInfo.DIWater), 10, 2) as OneDIWater,
STR(AVG(Equ_EquInfo.Water), 10, 2) as OneWater,
COUNT(EquName) as TaiNumber,
str(AVG(Equ_EquInfo.DIWater/0.07+Equ_EquInfo.Water),10,2) as MidWater,
AllWater=0.0
FROM Equ_EquInfo,Pub_DeptProcInfo
where Equ_EquInfo.DeptProcNo=Pub_DeptProcInfo.DeptProcNo
GROUP BY Pub_DeptProcInfo.DeptProcName, Equ_EquInfo.EquName

--以上数据都正确无误地
Update #Water
Set AllWater=MidWater*TaiNumber

--这也可以

--以下的就有问题,既是取消上面的更新的也会的.

Select DeptProcName,EquName,OneDiWater,OneWater,TaiNumber,AllWater,
(select sum(AllWater) from #Water where #Water.DeptProcName=p.DeptProcName) As Litter
from #Water p

--结果如下:
DeptProcName,EquName, OneDiWater, OneWater,TaiNumber,AllWater,Litter
黑化 棕化加药/储药缸 .00 .00 1 .00 74.85
黑化 棕化生产线 2.50 4.07 1 39.78 74.85
钻孔(S) 钻靶机 .00 .00 7 .00 .00
钻孔(M) 钻咀测经仪 .00 .00 2 .00 .00
钻孔(M) 钻咀装坏机 .00 .00 1 .00 .00
铣板 钻嘴测径仪 .00 .00 1 .00 1.20

--本来结果应该是 黑化的工序小计为39.78+0.00
DeptProcName,EquName, OneDiWater, OneWater,TaiNumber,AllWater,Litter
黑化 棕化加药/储药缸 .00 .00 1 .00 39.78
黑化 棕化生产线 2.50 4.07 1 39.78 39.78
钻孔(S) 钻靶机 .00 .00 7 .00 .00
钻孔(M) 钻咀测经仪 .00 .00 2 .00 .00
钻孔(M) 钻咀装坏机 .00 .00 1 .00 .00
铣板 钻嘴测径仪 .00 .00 1 .00 .00

--另外的同样功能的存储过程

IF object_id('tempdb..#tt') IS NULL
CREATE TABLE #tt(DeptProcName varchar(50), EquType varchar(50), EquName varchar(50), EquDes varchar(50), TaiNumber int, OneTaiPower numeric(10,2), AllPower numeric(10,2))
ELSE delete #tt

INSERT
INTO #tt
SELECT a.DeptProcName, Equ_EquInfo.EquType, Equ_EquInfo.EquName,
Equ_EquInfo.EquDes, COUNT(Equ_EquInfo.EquName) AS TaiNumber,
STR(AVG(Equ_EquInfo.Power), 10, 2) AS OneTaiPower,
SUM(Equ_EquInfo.Power) AS AllPower
FROM Equ_EquInfo INNER JOIN
Pub_DeptProcInfo a ON Equ_EquInfo.DeptProcNo = a.DeptProcNo
GROUP BY a.DeptProcName, Equ_EquInfo.EquName, Equ_EquInfo.EquDes, Equ_EquInfo.EquType

--这就是相同的语句

Select *,(select sum(Allpower) from #tt where #tt.DeptProcName=a.DeptProcName) As Litter
from #tt a
GO

--结果正确:
FQC(S) 矫平机 / 1 .20 .20 14.40
FQC(S) 矫平机 HL-JPJ100 1 .30 .30 14.40
FQC(S) 吸缩包装机 FM-76 1 1.90 1.90 14.40
FQC(S) 吸缩机 FM-5540 1 2.00 2.00 14.40
FQC(S) 真空包装机 ZBZ-588 1 10.00 10.00 14.40

...全文
23 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigwhiteshark 2003-12-23
神啊!
救救我吧!
回复
roapzone 2003-12-22

太长,分太少
回复
bigwhiteshark 2003-12-22
神啊!
救救我吧!
回复
bigwhiteshark 2003-12-22
不会吧!!
我的目的就是先修改ALLWater
然后再查询。。

其实即使我注解了它们 , 也会出现那些情况
回复
gmlxf 2003-12-22
Update #Water
Set AllWater=MidWater*TaiNumber
---你看看你的AllWater值都已经被你修改了,要看你对应的MidWater值是多少,如果是1就不变,相反就变了。
回复
bigwhiteshark 2003-12-22
我的是临时表
回复
qiaolin53 2003-12-22
查询应该没有错,可能是数据有问题。
建议你把原表备份重新输入新数据然后再查。
回复
bigwhiteshark 2003-12-22
我是更新后再查询的,不可能结果会变的。
回复
gmlxf 2003-12-22
Update #Water
Set AllWater=MidWater*TaiNumber

已经被你更新了,所有下面的结果变了。

你的语句没有错。
回复
dafu71 2003-12-22
语句没错,可能数据有问题
回复
bigwhiteshark 2003-12-22
分我是会加的。。。
其实不长。。。
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告