300分解一问题,解决的话在给200分

lllqe 2005-02-07 10:39:30
CREATE TABLE #TMP(JT VARCHAR(20) not null,bph varchar(10) not null,Sph Varchar(50) Null,quantity decimal(18,4) Null)
Insert Into #tmp
Select 'A','001','A001',20
Union all
Select 'A','001','A002',20
Union all
Select 'A','002','A003',23
Union All
Select 'B','001','A002',25
Union All
Select 'B','002','A002',25
Union All
Select 'C','001','A003',26
要求输出
JT bph Sph1 Sph2 quantity
A 001-002 A001 A002 43
B 001-002 A001 50
C 001 A003 26
...全文
415 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shires 2005-02-10
  • 打赏
  • 举报
回复
oh
zb1999 2005-02-10
  • 打赏
  • 举报
回复
up
zjcxc 元老 2005-02-10
  • 打赏
  • 举报
回复
--加多一个判断就行了.

CREATE TABLE tb(JT VARCHAR(20) not null,bph varchar(10) not null,Sph Varchar(50) Null,quantity decimal(18,4) Null)
Insert tb Select 'A','001','A001',20
Union all Select 'A','001','A002',20
Union all Select 'A','001','A003',20
Union all Select 'A','001','A004',20
Union all Select 'A','002','A004',23
Union All Select 'B','001','A002',25
Union All Select 'B','002','A002',25
Union All Select 'C','001','A003',26
go

--处理(假定不会出现 bph 不连续的情况)
declare @s nvarchar(4000),@i varchar(10)
select top 1
@s=N'',@i=count(*)
from tb group by Sph
order by count(*) desc
while @i>0
select @s=N',Sph'+@i+N'=max(case i when '+@i+' then Sph else N'''' end)'+@s
,@i=@i-1
exec('select JT
,bph=case when min(bph)=max(bph) then rtrim(min(bph)) else rtrim(min(bph)) +N''-''+rtrim(max(bph)) end
'+@s+N'
,quantity=sum(quantity)
from(
select i=(select count(distinct Sph) from tb where JT=a.JT and Sph<a.Sph)+1
,*
from tb a
)aa group by JT')
go

--删除测试
drop table tb


lvwaike 2005-02-08
  • 打赏
  • 举报
回复
都写那么多呀,太厉害呀
子陌红尘 2005-02-07
  • 打赏
  • 举报
回复
declare @s varchar(8000)
declare @i varchar(10)
set @s = ''

select @i = max(a.counts) from (select count(distinct Sph) as counts from #tmp group by JT) a

while(@i>0)
begin
select @s=',[sph'+@i+']=max(case when id='+@i+' then sph end) '+@s
set @i=@i-1
end

exec('
select
JT,
Sph,
min(bph) as bph1,
max(bph) as bph2,
sum(quantity) as quantity,
id = 0
into
#t
from
#tmp
group by JT,Sph

declare @i int,@Sph varchar(50)

update #t set @i=case when @Sph=Sph then @i+1 else 1 end,id=@i,@Sph=Sph

select JT,
case
when min(bph1) = max(bph2) then min(bph1)
else min(bph1)+''-''+max(bph2)
end as bph
'+@s+',sum(quantity) as quantity from #t group by JT')
zjcxc 元老 2005-02-07
  • 打赏
  • 举报
回复
--考虑 bph 不连续的处理

--测试数据
CREATE TABLE tb(JT VARCHAR(20) not null,bph varchar(10) not null,Sph Varchar(50) Null,quantity decimal(18,4) Null)
Insert tb Select 'A','001','A001',20
Union all Select 'A','002','A002',20
Union all Select 'A','004','A003',23
Union All Select 'B','001','A002',25
Union All Select 'B','002','A002',25
Union All Select 'C','001','A003',26
go

--处理函数
create function f_bph(@JT VARCHAR(20))
returns nvarchar(4000)
as
begin
declare @re nvarchar(4000),@pid int
select @re='',@pid=-1
select @re=case @pid+1 when id then @re
else @re+N'-'+right(1000+@pid,3)+','+right(1000+id,3) end
,@pid=id
from(
select distinct id=cast(bph as int)
from tb where JT=@JT and isnumeric(bph)=1
)a order by id
return(stuff(@re,1,5,N'')+case when right(@re,3)=@pid then N'' else N'-'+right(1000+@pid,3) end)
end
go

--处理(假定不会出现 bph 不连续的情况)
declare @s nvarchar(4000),@i varchar(10)
select top 1
@s=N'',@i=count(*)
from tb group by Sph
order by count(*) desc
while @i>0
select @s=N',Sph'+@i+N'=max(case i when '+@i+' then Sph else N'''' end)'+@s
,@i=@i-1
exec('select JT
,bph=dbo.f_bph(JT)
'+@s+N'
,quantity=sum(quantity)
from(
select i=(select count(distinct Sph) from tb where JT=a.JT and Sph<a.Sph)+1
,*
from tb a
)aa group by JT')
go

--删除测试
drop table tb
drop function f_bph

/*--测试结果

JT bph Sph1 Sph2 Sph3 quantity
-------------------- ----------- ---------- ------------ ----------
A 001-002,004 A001 A002 A003 63.0000
B 001-002 A002 50.0000
C 001 A003 26.0000
--*/
zjcxc 元老 2005-02-07
  • 打赏
  • 举报
回复
--测试数据
CREATE TABLE tb(JT VARCHAR(20) not null,bph varchar(10) not null,Sph Varchar(50) Null,quantity decimal(18,4) Null)
Insert tb Select 'A','001','A001',20
Union all Select 'A','001','A002',20
Union all Select 'A','002','A003',23
Union All Select 'B','001','A002',25
Union All Select 'B','002','A002',25
Union All Select 'C','001','A003',26
go

--处理(假定不会出现 bph 不连续的情况)
declare @s nvarchar(4000),@i varchar(10)
select top 1
@s=N'',@i=count(*)
from tb group by Sph
order by count(*) desc
while @i>0
select @s=N',Sph'+@i+N'=max(case i when '+@i+' then Sph else N'''' end)'+@s
,@i=@i-1
exec('select JT
,bph=rtrim(min(bph))+N''-''+rtrim(max(bph))
'+@s+N'
,quantity=sum(quantity)
from(
select i=(select count(distinct Sph) from tb where JT=a.JT and Sph<a.Sph)+1
,*
from tb a
)aa group by JT')
go

--删除测试
drop table tb

/*--测试结果

JT bph Sph1 Sph2 Sph3 quantity
-------------------- ----------- ---------- ------------ ----------
A 001-002 A001 A002 A003 63.0000
B 001-002 A002 50.0000
C 001-001 A003 26.0000
--*/
zjcxc 元老 2005-02-07
  • 打赏
  • 举报
回复
bph:同一jt,它们的bph合在一起,如A:它有两个pbh,就是转换成 '001-002'

如果有不连续的怎么合并?
lllqe 2005-02-07
  • 打赏
  • 举报
回复
bph:同一jt,它们的bph合在一起,如 jt A 它有pbh '001','002','003','004'

jt bph
A 001-004
lllqe 2005-02-07
  • 打赏
  • 举报
回复
不好意思,我说得不够详细拉
quantity:这个字段是根据 jt 分组的
bph:同一jt,它们的bph合在一起,如A:它有两个pbh,就是转换成 '001-002'
Sph1 Sph2 Sph3 是不限制字段,它是根据 jt来确定的.
输出格式应该是:

JT bph Sph1 Sph2 Sph3 quantity
A 001-002 A001 A002 A003 63
B 001-002 A002 50
C 001 A003 26
子陌红尘 2005-02-07
  • 打赏
  • 举报
回复
Sph1、Sph2字段的获取规则总应该有个交代吧,况且楼主给出的数据和期望的输出之间还有矛盾。
dzhfly 2005-02-07
  • 打赏
  • 举报
回复
select JT,cast(min(bph)as nvarchar(10))+
(case when cast(min(bph)as nvarchar(10))=cast(max(bph)as nvarchar(10)) then ''
else +'-'+cast(max(bph)as nvarchar(10)) end )
as bph,
cast(JT+min(bph)as nvarchar(10)) as Sph1,
(case when cast(min(bph)as nvarchar(10))=cast(max(bph)as nvarchar(10)) then ''
else cast(JT+max(bph)as nvarchar(10)) end )
as Sph2,
cast(sum(quantity)as numeric(8,0)) as quantity
from #TMP group by JT
renaski 2005-02-07
  • 打赏
  • 举报
回复
说下规则吧。
zjcxc 元老 2005-02-07
  • 打赏
  • 举报
回复
看不出什么意思
Frewin 2005-02-07
  • 打赏
  • 举报
回复
是不是
JT bph Sph1 Sph2 Sph3 quantity
A 001-002 A001 A002 A003 63
B 001-002 A001 50
C 001 A003 26
jinjazz 2005-02-07
  • 打赏
  • 举报
回复
每看出规则?A的'A003'为什么不统计?还有B怎么来的A001
子陌红尘 2005-02-07
  • 打赏
  • 举报
回复
修改一下邹老大的:

--------------------------------------------------------------------------------
--测试数据
CREATE TABLE tb(JT VARCHAR(20) not null,bph varchar(10) not null,Sph Varchar(50) Null,quantity decimal(18,4) Null)
Insert tb Select 'A','001','A001',20
Union all Select 'A','001','A002',20
Union all Select 'A','002','A003',23
Union All Select 'B','001','A002',25
Union All Select 'B','002','A002',25
Union All Select 'C','001','A003',26
go

--处理(假定不会出现 bph 不连续的情况)
declare @s nvarchar(4000),@i varchar(10)
select top 1
@s=N'',@i=count(*)
from tb group by Sph
order by count(*) desc
while @i>0
select @s=N',Sph'+@i+N'=max(case i when '+@i+' then Sph else N'''' end)'+@s
,@i=@i-1
exec('select JT
,bph=(case when min(bph) = max(bph) then min(bph) else rtrim(min(bph))+N''-''+rtrim(max(bph)) end)
'+@s+N'
,quantity=sum(quantity)
from(
select i=(select count(distinct Sph) from tb where JT=a.JT and Sph<a.Sph)+1
,*
from tb a
)aa group by JT')
go

--删除测试
drop table tb
子陌红尘 2005-02-07
  • 打赏
  • 举报
回复
修改一下:
-----------------------------------------------------------------------------------
CREATE TABLE #TMP(JT VARCHAR(20) not null,bph varchar(10) not null,Sph Varchar(50) Null,quantity decimal(18,4) Null)
Insert Into #tmp
Select 'A','001','A001',20
Union all
Select 'A','001','A002',20
Union all
Select 'A','002','A003',23
Union All
Select 'B','001','A002',25
Union All
Select 'B','002','A002',25
Union All
Select 'C','001','A003',26



declare @s varchar(8000)
declare @i varchar(10)
set @s = ''

select @i = max(a.counts) from (select count(distinct Sph) as counts from #tmp group by JT) a

while(@i>0)
begin
select @s=',[sph'+@i+']=max(case when id='+@i+' then sph end) '+@s
set @i=@i-1
end

exec('
select
JT,
Sph,
min(bph) as bph1,
max(bph) as bph2,
sum(quantity) as quantity,
id = 0
into
#t
from
#tmp
group by JT,Sph
order by JT,Sph

declare @i int,@JT varchar(50)

update #t set @i=case when @JT=JT then @i+1 else 1 end,id=@i,@JT=JT

select JT,
case
when min(bph1) = max(bph2) then min(bph1)
else min(bph1)+''-''+max(bph2)
end as bph
'+@s+',sum(quantity) as quantity from #t group by JT')

drop table #tmp
lllqe 2005-02-07
  • 打赏
  • 举报
回复
谢谢zjcxc(邹建) ( ) 信誉:492 ,不过有点问题
lllqe 2005-02-07
  • 打赏
  • 举报
回复
有点问题?
CREATE TABLE tb(JT VARCHAR(20) not null,bph varchar(10) not null,Sph Varchar(50) Null,quantity decimal(18,4) Null)
Insert tb Select 'A','001','A001',20
Union all Select 'A','001','A002',20
Union all Select 'A','001','A003',20
Union all Select 'A','001','A004',20
Union all Select 'A','002','A004',23
Union All Select 'B','001','A002',25
Union All Select 'B','002','A002',25
Union All Select 'C','001','A003',26
go

--处理(假定不会出现 bph 不连续的情况)
declare @s nvarchar(4000),@i varchar(10)
select top 1
@s=N'',@i=count(*)
from tb group by Sph
order by count(*) desc
while @i>0
select @s=N',Sph'+@i+N'=max(case i when '+@i+' then Sph else N'''' end)'+@s
,@i=@i-1
exec('select JT
,bph=rtrim(min(bph))+N''-''+rtrim(max(bph))
'+@s+N'
,quantity=sum(quantity)
from(
select i=(select count(distinct Sph) from tb where JT=a.JT and Sph<a.Sph)+1
,*
from tb a
)aa group by JT')
go

--删除测试
drop table tb
随着元宇宙概念兴起与虚拟数字人技术快速发展,虚拟主播、在线教育虚拟助教、元宇宙社交等应用场景对实时动作表情驱动系统提出更高需求。当前主流动作捕捉方案多依赖专业光学动捕设备或深度相机,设备成本高昂、部署复杂,难以在普通用户场景普及。本研究设计并实现一套基于普通单目摄像头的虚拟数字人实时动作表情驱动系统,旨在降低数字人内容生产门槛。系统采用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代码逐模块运行与调试,重点关注阶跃响应特征提取与增益优化策略的实现逻辑,同时可尝试将其应用于实际控制系统中进行对比验证,以深化对自动整定机制的理解。

34,876

社区成员

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

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