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

IT-司马青衫
壹号网络官方账号
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

...全文
74 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT-司马青衫 2003-12-23
  • 打赏
  • 举报
回复
神啊!
救救我吧!
roapzone 2003-12-22
  • 打赏
  • 举报
回复

太长,分太少
IT-司马青衫 2003-12-22
  • 打赏
  • 举报
回复
神啊!
救救我吧!
IT-司马青衫 2003-12-22
  • 打赏
  • 举报
回复
不会吧!!
我的目的就是先修改ALLWater
然后再查询。。

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

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

你的语句没有错。
dafu71 2003-12-22
  • 打赏
  • 举报
回复
语句没错,可能数据有问题
IT-司马青衫 2003-12-22
  • 打赏
  • 举报
回复
分我是会加的。。。
其实不长。。。
内容概要:本文围绕“基于超局部模型与自抗扰ESO观测器的无模型预测电流控制改进策略”展开研究,提出一种结合超局部模型(ULM)与扩张状态观测器(ESO)的无模型预测电流控制(MFPCC)改进方法,旨在提升永磁同步电机(PMSM)电流环的动态响应性能与抗干扰能力。该策略利用超局部模型对系统行为进行局部逼近,避免依赖精确数学模型,同时引入自抗扰控制中的ESO实时观测并补偿系统内外部扰动,有效抑制参数摄动、负载变化及模型不确定性带来的影响。研究通过Simulink搭建完整的控制系统仿真模型,对传统MFPCC与所提改进策略进行对比分析,验证了新方法在电流跟踪精度、响应速度和鲁棒性方面的优越性。; 适合人群:具备电机控制、现代控制理论及Simulink仿真基础的电气工程、自动化及相关专业的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高性能电机驱动系统中电流环控制器的设计与优化;②为无模型控制与自抗扰控制的融合应用提供技术参考;③支撑相关课题的仿真验证、论文复现与创新方法研究。; 阅读建议:建议读者结合Simulink仿真模型深入理解控制结构与参数整定过程,重点关注ESO的观测性能与扰动补偿机制,并可通过改变负载条件、参数偏差等工况进行鲁棒性测试,进一步掌握该改进策略的核心优势与适用边界。

34,876

社区成员

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

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