疑难问题

HappyQQ 2010-01-10 03:24:18
表TblCustomerTest有以下字段.
CustomerNo,CustomerName
'A001','A0001对应的名称'
'A002','A0002对应的名称'
'A003','A0003对应的名称'
'A004','A0004对应的名称'
'A005','A0005对应的名称'
'A006','A0006对应的名称'

表TblNode有以下字段(注MainBranch只取固定值'0001','0002','0003','0004',BankNodeNo 只取TblNode表字段NodeNo值字段)
NodeNo,NodeName,CustomerNo,MainBranch,BankNodeNo
内容如下,
'N0001','N0001Name','A001','0001','N0002'
'N0002','N0002Name','A001','0001','N0003'
'N0003','N0003Name','A003','0002,'N0003'
'N0004','N0004Name','A003','0002,'N0003'
'N0005','N0005Name','A004','0003,'N0004'
'N0006','N0006Name','A004','0004,'N0003'
'N0007','N0007Name','A005','0001,'N0003'
'N0008','N0008Name','A006','0003,'N0005'
'N0009','N0009Name','A006','0004,'N0005'

已知一个结果表TblReportB表:
CustomerNo,MainBranch,Cost,OtherNum
'A001','0001',1000,0
'A002','0002',1200,0
'A003','0002',1300,0

我需要核算TblReportB表中的OtherNum值.需要以下处理.

更新TblReportB的OtherNum字段需要符合以下要求.
统计TblNode的CustomerNo属于TblCustomerTest,且MainBranch属于固定值'0001','0002','0003','0004',
并且BankNodeNo属于TblNodes的值.

我的处理方式如下,但不是我想要的结果。
请大家帮我处理一下游标中的SQL语句。


DECLARE crsBranch CURSOR FORWARD_ONLY STATIC FOR
--四个固定值
Select BranchNo = '0001'
Union All
Select BranchNo = '0002'
Union All
Select BranchNo = '0003'
Union All
Select BranchNo = '0004'

OPEN crsBranch
FETCH NEXT FROM crsBranch INTO @MainBranch
WHILE @@FETCH_STATUS = 0
BEGIN

Update [TblReportB]
Set OtherNum = b.SNodeNum
From [TblReportB] as a
Join (
Select Cust.CustomerNo,SNodeNum = Count(*) From
TblNode Node
Left Join
TblCustomerTest Cust
On Cust.CustomerNo = Node.CustomerNo And Node.MainBranch=@MainBranch
And Node.BankNodeNo in
(
Select Node.NodeNo From
TblNode Node
Left Join
TblCustomerTest Cust
On Cust.CustomerNo = Node.CustomerNo And Node.MainBranch=@MainBranch
)
Group by Cust.CustomerNo
Having Cust.CustomerNo is not null
) as b
On a.CustomerNo =b.CustomerNo And MainBranch =@MainBranch
FETCH NEXT FROM crsBranch INTO @MainBranch
END

DEALLOCATE crsBranch



我需要的结果是:
预期结果表TblReportB表的值:
CustomerNo,MainBranch,Cost,OtherNum
'A001','0001',1000,2
'A002','0002',1200,0
'A003','0002',1300,2

哪位朋友帮帮忙。
...全文
176 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
HappyQQ 2010-01-14
  • 打赏
  • 举报
回复
原来是我第一个存储过程的错,那位帮助我的朋友,我们的结果都没错.

所以考虑问题以后一定不要认为自己的后来的程序有问题.
fanzhouqi 2010-01-10
  • 打赏
  • 举报
回复

if object_id('[TblCustomerTest]') is not null drop table [TblCustomerTest]
create table [TblCustomerTest] (CustomerNo varchar(4),CustomerName varchar(15))
insert into [TblCustomerTest]
select 'A001','A0001对应的名称' union all
select 'A002','A0002对应的名称' union all
select 'A003','A0003对应的名称' union all
select 'A004','A0004对应的名称' union all
select 'A005','A0005对应的名称' union all
select 'A006','A0006对应的名称'
--> 测试数据: [TblNode]
if object_id('[TblNode]') is not null drop table [TblNode]
create table [TblNode] (NodeNo varchar(5),NodeName varchar(9),CustomerNo varchar(4),MainBranch varchar(4),BankNodeNo varchar(5))
insert into [TblNode]
select 'N0001','N0001Name','A001','0001','N0002' union all
select 'N0002','N0002Name','A001','0001','N0003' union all
select 'N0003','N0003Name','A003','0002','N0003' union all
select 'N0004','N0004Name','A003','0002','N0003' union all
select 'N0005','N0005Name','A004','0003','N0004' union all
select 'N0006','N0006Name','A004','0004','N0003' union all
select 'N0007','N0007Name','A005','0001','N0003' union all
select 'N0008','N0008Name','A006','0003','N0005' union all
select 'N0009','N0009Name','A006','0004','N0005'

--> 测试数据: [TblReportB]
if object_id('[TblReportB]') is not null drop table [TblReportB]
create table [TblReportB] (CustomerNo varchar(4),MainBranch varchar(4),Cost int,OtherNum int)
insert into [TblReportB]
select 'A001','0001',1000,0 union all
select 'A002','0002',1200,0 union all
select 'A003','0002',1300,0

declare @t table(MainBranch varchar(4))
insert into @t
select '0001'
union all select '0002'
union all select '0003'
union all select '0004'

select CustomerNo,MainBranch,Cost
,OtherNum = (select count(1)
from [TblCustomerTest] b
inner join [TblNode] c on b.CustomerNo = c.CustomerNo
inner join @t d on c.MainBranch = d.MainBranch
where a.CustomerNo = b.CustomerNo)
from [TblReportB] a

CustomerNo MainBranch Cost OtherNum
---------- ---------- ----------- -----------
A001 0001 1000 2
A002 0002 1200 0
A003 0002 1300 2

(所影响的行数为 3 行)
??
pt1314917 2010-01-10
  • 打赏
  • 举报
回复
QQ:4693718
HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
方便留下其他联系方式吗?

我这个问题苦恼了我一天了,其他我都算出来了,就差一个字段没核算出来了.

兄弟你的核算结果与我的SQL结果好像一样.
pt1314917 2010-01-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 happyqq 的回复:]
兄弟还是不行,结果并不是我想要的.
能否再想想办法.
[/Quote]

怎么不是呢?我理解错了?
--> 测试数据: [TblCustomerTest]
if object_id('[TblCustomerTest]') is not null drop table [TblCustomerTest]
create table [TblCustomerTest] (CustomerNo varchar(4),CustomerName varchar(15))
insert into [TblCustomerTest]
select 'A001','A0001对应的名称' union all
select 'A002','A0002对应的名称' union all
select 'A003','A0003对应的名称' union all
select 'A004','A0004对应的名称' union all
select 'A005','A0005对应的名称' union all
select 'A006','A0006对应的名称'
--> 测试数据: [TblNode]
if object_id('[TblNode]') is not null drop table [TblNode]
create table [TblNode] (NodeNo varchar(5),NodeName varchar(9),CustomerNo varchar(4),MainBranch varchar(4),BankNodeNo varchar(5))
insert into [TblNode]
select 'N0001','N0001Name','A001','0001','N0002' union all
select 'N0002','N0002Name','A001','0001','N0003' union all
select 'N0003','N0003Name','A003','0002','N0003' union all
select 'N0004','N0004Name','A003','0002','N0003' union all
select 'N0005','N0005Name','A004','0003','N0004' union all
select 'N0006','N0006Name','A004','0004','N0003' union all
select 'N0007','N0007Name','A005','0001','N0003' union all
select 'N0008','N0008Name','A006','0003','N0005' union all
select 'N0009','N0009Name','A006','0004','N0005'

--> 测试数据: [TblReportB]
if object_id('[TblReportB]') is not null drop table [TblReportB]
create table [TblReportB] (CustomerNo varchar(4),MainBranch varchar(4),Cost int,OtherNum int)
insert into [TblReportB]
select 'A001','0001',1000,0 union all
select 'A002','0002',1200,0 union all
select 'A003','0002',1300,0

update [TblReportB] set othernum=cnt
from [TblReportB] a,
(select customerno,cnt=count(*) from [TblNode] c where exists(select 1 from tblnode where nodeno=c.banknodeno) group by customerno)b
where a.customerno=b.customerno

--查看结果:
select * from [TblReportB]
HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
兄弟还是不行,结果并不是我想要的.
能否再想想办法.
pt1314917 2010-01-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 happyqq 的回复:]
兄弟,你没有把BankNodeNo 考虑进去.

在核算时,需要将核算的条件都要考虑进去.
[/Quote]


--try:
update [TblReportB] set othernum=cnt
from [TblReportB] a,
(select customerno,cnt=count(*) from [TblNode] c where exists(select 1 from tblnode where nodeno=c.banknodeno) group by customerno)b
where a.customerno=b.customerno

HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
兄弟,你没有把BankNodeNo 考虑进去.

在核算时,需要将核算的条件都要考虑进去.
pt1314917 2010-01-10
  • 打赏
  • 举报
回复
--> 测试数据: [TblCustomerTest]
if object_id('[TblCustomerTest]') is not null drop table [TblCustomerTest]
create table [TblCustomerTest] (CustomerNo varchar(4),CustomerName varchar(15))
insert into [TblCustomerTest]
select 'A001','A0001对应的名称' union all
select 'A002','A0002对应的名称' union all
select 'A003','A0003对应的名称' union all
select 'A004','A0004对应的名称' union all
select 'A005','A0005对应的名称' union all
select 'A006','A0006对应的名称'
--> 测试数据: [TblNode]
if object_id('[TblNode]') is not null drop table [TblNode]
create table [TblNode] (NodeNo varchar(5),NodeName varchar(9),CustomerNo varchar(4),MainBranch varchar(4),BankNodeNo varchar(5))
insert into [TblNode]
select 'N0001','N0001Name','A001','0001','N0002' union all
select 'N0002','N0002Name','A001','0001','N0003' union all
select 'N0003','N0003Name','A003','0002','N0003' union all
select 'N0004','N0004Name','A003','0002','N0003' union all
select 'N0005','N0005Name','A004','0003','N0004' union all
select 'N0006','N0006Name','A004','0004','N0003' union all
select 'N0007','N0007Name','A005','0001','N0003' union all
select 'N0008','N0008Name','A006','0003','N0005' union all
select 'N0009','N0009Name','A006','0004','N0005'

--> 测试数据: [TblReportB]
if object_id('[TblReportB]') is not null drop table [TblReportB]
create table [TblReportB] (CustomerNo varchar(4),MainBranch varchar(4),Cost int,OtherNum int)
insert into [TblReportB]
select 'A001','0001',1000,0 union all
select 'A002','0002',1200,0 union all
select 'A003','0002',1300,0


update [TblReportB] set othernum=cnt
from [TblReportB] a,
(select customerno,cnt=count(*) from [TblNode] group by customerno)b
where a.customerno=b.customerno

--查看结果:
select * from [TblReportB]

--结果:

CustomerNo MainBranch Cost OtherNum
---------- ---------- ----------- -----------
A001 0001 1000 2
A002 0002 1200 0
A003 0002 1300 2

HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
Select Cust.CustomerNo,SNodeNum = Count(*) From
TblNode Node
Left Join
TblCustomerTest Cust
On Cust.CustomerNo = Node.CustomerNo And Node.MainBranch=@MainBranch
And Node.BankNodeNo in
(
Select Node.NodeNo From
TblNode Node
Left Join
TblCustomerTest Cust
On Cust.CustomerNo = Node.CustomerNo And Node.MainBranch=@MainBranch
)
Group by Cust.CustomerNo
Having Cust.CustomerNo is not null


以上我的思路,但结果不是我想要的.
HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
标红色的记录是属于我要求的记录.
所以最后

TblReportB表的值将是:
CustomerNo,MainBranch,Cost,OtherNum
'A001','0001',1000,2
'A002','0002',1200,0
'A003','0002',1300,2
HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
未核算之前
TblReportB表已存在以下记录:
CustomerNo,MainBranch,Cost,OtherNum
'A001','0001',1000,0
'A002','0002',1200,0
'A003','0002',1300,0

核算之后的值:
TblReportB表:
CustomerNo,MainBranch,Cost,OtherNum
'A001','0001',1000,2
'A002','0002',1200,0
'A003','0002',1300,2

核算的条件是:
统计TblNode表中CustomerNo属于TblCustomerTest,且MainBranch属于固定值'0001','0002','0003','0004',
并且TblNode表中BankNodeNo字段值属于TblNode的NodeNo字段.

表TblNode
NodeNo,NodeName,CustomerNo,MainBranch,BankNodeNo
'N0001','N0001Name','A001','0001','N0002'
'N0002','N0002Name','A001','0001','N0003'
'N0003','N0003Name','A003','0002,'N0003'
'N0004','N0004Name','A003','0002,'N0003'

'N0005','N0005Name','A004','0003,'N0004'
'N0006','N0006Name','A004','0004,'N0003'
'N0007','N0007Name','A005','0001,'N0003'
'N0008','N0008Name','A006','0003,'N0005'
'N0009','N0009Name','A006','0004,'N0005'


pt1314917 2010-01-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 happyqq 的回复:]
不好意思,第一次在这上面发这么长的问题,也不知道如何方便你们处理我的问题.

[/Quote]

还把TblReportB表的数据贴出来。另外把想要的结果。以及得到结果的规律说一下。
HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
不好意思,第一次在这上面发这么长的问题,也不知道如何方便你们处理我的问题.
HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
已知一个结果表TblReportB表:
CustomerNo,MainBranch,Cost,OtherNum
'A001','0001',1000,0
'A002','0002',1200,0
'A003','0002',1300,0


我需要核算TblReportB表中的OtherNum值.需要以下处理.
条件是:
统计TblNode的CustomerNo属于TblCustomerTest,且MainBranch属于固定值'0001','0002','0003','0004',
并且BankNodeNo属于TblNodes的值.
正确的结果是:
CustomerNo,MainBranch,Cost,OtherNum
'A001','0001',1000,2
'A002','0002',1200,0
'A003','0002',1300,2

其他,请参考我的那段SQL语句.



alexjack1210 2010-01-10
  • 打赏
  • 举报
回复
楼主你题目怎么这么长,都晕了!你要得到什么样的结果咯?
netcup 2010-01-10
  • 打赏
  • 举报
回复
太长了,看着晕,。另外,麻烦提问者把建表语句和插入数据的语句都写好,别人省了时间了
pt1314917 2010-01-10
  • 打赏
  • 举报
回复
CustomerNo,MainBranch,Cost,OtherNum
'A001','0001',1000,2
'A002','0002',1200,0
'A003','0002',1300,2

---------------
能说说你这结果是怎么来的吗?
HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
顶起来,高手们,帮帮忙.
HappyQQ 2010-01-10
  • 打赏
  • 举报
回复
顶起来,高手们,帮帮忙.
加载更多回复(3)
随着元宇宙概念兴起与虚拟数字人技术快速发展,虚拟主播、在线教育虚拟助教、元宇宙社交等应用场景对实时动作表情驱动系统提出更高需求。当前主流动作捕捉方案多依赖专业光学动捕设备或深度相机,设备成本高昂、部署复杂,难以在普通用户场景普及。本研究设计并实现一套基于普通单目摄像头的虚拟数字人实时动作表情驱动系统,旨在降低数字人内容生产门槛。系统采用Unity作为主开发引擎,结合Blender进行数字人模型构建与BlendShape表情系统制作,使用MediaPipe框架实现人脸关键点检测与人体姿态估计,通过C#脚本完成实时数据处理与渲染控制。系统包含五个关键模块:人脸关键点检测(MediaPipe Face Mesh提取468个关键点)、人体姿态估计(MediaPipe Pose识别33个骨骼关键点)、表情迁移映射、动作平滑优化(卡尔曼滤波与贝塞尔曲线插值消除抖动)、实时渲染(60fps流畅渲染,支持直播推流与视频录制)。实验结果表明,系统在普通笔记本上可实现60fps实时驱动,人脸关键点检测准确率达98.7%,人体姿态估计平均误差小于5像素,表情迁移相似度达92.3%。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论基础 第3章 系统架构设计 第4章 关键模块设计与实现 第5章 实验与结果分析 第6章 总结与展望 参考文献
内容概要:本文提出了一种基于蒙特卡洛模拟与拉格朗日松弛法的分散式优化策略,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过蒙特卡洛方法模拟电动汽车充电行为的随机性,生成多样化负荷场景,构建以降低电网负荷波动和用户充电成本为目标的优化模型;采用拉格朗日松弛法对耦合约束进行解耦,实现分布式求解,在保障用户隐私的同时提升计算效率。文中设计了详细的仿真场景,系统分析了该调度策略对电网负荷特性和用户经济性的影响,验证了所提方法在实际应用中的有效性与可行性。; 适合人群:具备电力系统运行、优化算法理论及Matlab编程能力的研究生、科研人员以及从事智能电网与电动汽车相关领域的工程技术人员。; 使用场景及目标:①应用于城市规模化充电站集群的有序充电管理,实现电网“削峰填谷”;②为电力公司制定科学合理的分时电价政策提供量化分析工具;③支撑智能电网中需求侧资源的分布式协同优化调度研究与系统设计。; 阅读建议:建议结合提供的Matlab代码深入理解算法实现流程,重点掌握蒙特卡洛场景生成机制与拉格朗日松弛迭代求解过程,可通过调整参数设置复现不同工况下的仿真结果,以深化对分散式优化机制与调度效果之间关系的理解。
内容概要:本文研究了基于阶跃响应的V-Tiger自动增益调整PID控制器优化方法,并提供了完整的Matlab代码实现。通过深入分析PID控制的核心性能指标与V-Tiger控制器的动态特性,提出了一种融合阶跃响应特征提取与多目标协同优化的自动整定方案,设计了具备自适应迭代校正能力的优化机制,有效提升了控制系统的响应速度、稳定性和抗干扰能力。文中系统阐述了整定原理、算法架构设计及性能验证流程,通过仿真实验充分验证了该方法在复杂工业控制场景下实现高精度参数自整定的可行性与优越性,为智能PID控制提供了可复现、可拓展的技术路径。; 适合人群:具备自动控制理论基础和Matlab编程能力,从事控制工程、自动化、电气工程等领域研究的研发人员及高校研究生。; 使用场景及目标:①应用于需要高精度PID参数整定的工业控制系统中,如电机驱动、温度控制、电力电子变换器等;②为科研人员提供一种可复现、可扩展的智能PID整定方法,用于提升系统动态性能与鲁棒性;③作为教学案例帮助学生理解PID整定原理与现代优化算法的融合应用。; 阅读建议:建议读者结合文中的Matlab代码逐模块运行与调试,重点关注阶跃响应特征提取与增益优化策略的实现逻辑,同时可尝试将其应用于实际控制系统中进行对比验证,以深化对自动整定机制的理解。

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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