呼叫小三,修改SQL

wangxiaofeiwuqiao 2011-07-20 02:28:24
有表tb1,tb2联合查询组成如下视图(简称视图1,不必理会我的SQL语句)
视图1:

ITEM_CODE LOCATION STOCK_QTY QTY_RATIO CTM_QTY
20-03304-14010 CSP3 500 0.15 75
20-94726-03010 CSP3 1600 0.65 1040

表tb1:(包含视图1所有的ITEM_CODE,主要为最后结果提供QTY_RATIO,不必理会其他数据)

ITEM_CODE LOCATION STOCK_QTY QTY_RATIO CTM_QTY
20-03304-14010 CSP3 500 0.15 75
20-94726-03010 CSP3 1600 0.65 1040
21-03304-14010 CSP3 100 0.5 50
22-03304-14010 CSP3 200 0.9 180
21-94726-03010 CSP3 100 0.5 50
22-94726-03010 CSP3 200 0.8 160
90-94726-03010 CSP3 400 0.5 100

表:BOM1;其中PARENT与ITEM_CODE可以存在不确定的递归关系,比如最高层为99,然后是98,97,91,90,20,21,22等,20不是最高层的,21,22等最低层.

PARENT ITEM_CODE QTY_PER(指ITEM_CODE的重量) BOM_UNIT
97-03304-14010 91-03304-14010 1.5 PCS
91-03304-14010 90-03304-14010 7.5 PCS
90-03304-14010 20-03304-14010 0.5 PCS
20-03304-14010 21-03304-14010 1.6 G
20-03304-14010 22-03304-14020 0.8 G
97-94726-03010 90-94726-03010 4.6 PCS
90-94726-03010 20-94726-03010 8.8 PCS
20-94726-03010 21-94726-03010 1.6 G
20-94726-03010 22-94726-03010 9.8 G

我想要的结果::(来自视图1的ITEM_CODE,只要它的下面有下层,就要拆分到最低层)

PARENT ITEM_CODE LOCATION P_QTY STOCK_QTY QTY_RATIO CTM_QTY BOM_UNIT
20-03304-14010 21-03304-14010 CSP1 500 800 0.5 400 G
20-03304-14010 22-03304-14010 CSP1 500 400 0.9 360 PCS
20-94726-03010 21-94726-03010 CSP1 1600 2560 0.5 1280 G
20-94726-03010 22-94726-03010 CSP1 1600 15680 0.8 12544 PCS
其中P_QTY=视图1中的STOCK_QTY, STOCK_QTY=P_QTY*BOM1对应QTY_PER,QTY_RATIO来自tb1中对应的ITEM_CODE,CTM_QTY=STOCK_QTY*QTY_RATIO;

参考类似帖子:http://topic.csdn.net/u/20110719/17/e1f4cd3f-6156-4f38-aa04-0329899035c9.html?1014523738
数据库环境:sql 2000.最好一条sql搞定,因为我要将视图1的SQL插到最后的SQL中。
...全文
259 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangxiaofeiwuqiao 2011-07-20
  • 打赏
  • 举报
回复
测试通过,OK。非常感谢小三。真厉害。
pt1314917 2011-07-20
  • 打赏
  • 举报
回复
坐等小三。。。。
AcHerat 元老 2011-07-20
  • 打赏
  • 举报
回复
mingpei0703 2011-07-20
  • 打赏
  • 举报
回复
小三,看你的!
wangxiaofeiwuqiao 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acherat 的回复:]
这个。。。2000的话要拆分至最底层,肯定要用到函数:


SQL code

create table 视图1(ITEM_CODE varchar(50),LOCATION varchar(50),STOCK_QTY float,
QTY_RATIO float,CTM_QTY float)

insert into 视图1(ITEM_CODE,LOCATION,STOCK_QT……
[/Quote]
真快,我测试下先
wangxiaofeiwuqiao 2011-07-20
  • 打赏
  • 举报
回复
tb1的测试数据可以省略为:

create table tb1(ITEM_CODE varchar(50),QTY_RATIO float)
set nocount on
insert into tb1(ITEM_CODE,QTY_RATIO,)
values('20-03304-14010','0.15')
insert into tb1(ITEM_CODE,QTY_RATIO)
values('20-94726-03010','0.65')
insert into tb1(ITEM_CODE,QTY_RATIO)
values('21-03304-14010','0.5')
insert into tb1(ITEM_CODE,QTY_RATIO)
values('22-03304-14010','0.9')
insert into tb1(ITEM_CODE,QTY_RATIO)
values('21-94726-03010','0.5')
insert into tb1(ITEM_CODE,QTY_RATIO)
values('22-94726-03010','0.8')
insert into tb1(ITEM_CODE,QTY_RATIO)
values('90-94726-03010','1.2')

最后tb1表:

ITEM_CODE QTY_RATIO
20-03304-14010 0.15
20-94726-03010 0.65
21-03304-14010 0.5
22-03304-14010 0.9
21-94726-03010 0.5
22-94726-03010 0.8
90-94726-03010 0.5
cd731107 2011-07-20
  • 打赏
  • 举报
回复
小三,快来,帮楼主顶一下
AcHerat 元老 2011-07-20
  • 打赏
  • 举报
回复
这个。。。2000的话要拆分至最底层,肯定要用到函数:


create table 视图1(ITEM_CODE varchar(50),LOCATION varchar(50),STOCK_QTY float,
QTY_RATIO float,CTM_QTY float)

insert into 视图1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('20-03304-14010','CSP1','500','0.15','-7.5')
insert into 视图1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('20-94726-03010','CSP1','1600','0.65','1040')

create table tb1(ITEM_CODE varchar(50),LOCATION varchar(50),STOCK_QTY float,
QTY_RATIO float,CTM_QTY float)
set nocount on
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('20-03304-14010','CSP3','500','0.15','75')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('20-94726-03010','CSP3','1600','0.65','1040')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('21-03304-14010','CSP3','100','0.5','50')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('22-03304-14010','CSP3','200','0.9','180')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('21-94726-03010','CSP3','100','0.5','50')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('22-94726-03010','CSP3','200','0.8','160')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('90-94726-03010','CSP3','700','1.2','160')
go

Create table BOM1(PARENT varchar(50),ITEM_CODE varchar(50),
QTY_PER float,BOM_UNIT varchar(50))
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('97-03304-14010','91-03304-14010','1.5','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('91-03304-14010','90-03304-14010','7.5','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('90-03304-14010','20-03304-14010','0.5','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('20-03304-14010','21-03304-14010','1.6','G')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('20-03304-14010','22-03304-14010','0.8','G')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('97-94726-03010','90-94726-03010','4.6','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('90-94726-03010','20-94726-03010','8.8','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('20-94726-03010','21-94726-03010','1.6','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('20-94726-03010','22-94726-03010','9.8','G')
go

create function get_proC(@PARENT varchar(50))
returns varchar(1000)
as
begin
declare @t table(PARENT varchar(50),ITEM_CODE varchar(50),QTY_PER float,[level] int)
declare @i int
declare @ret varchar(1000)
declare @j int
set @j=1
set @i=1
insert into @t
select PARENT,ITEM_CODE,QTY_PER,@i from BOM1 where PARENT=@PARENT
while @@rowcount>0
begin
set @i=@i+1
insert into @t
select a.PARENT,a.ITEM_CODE,a.QTY_PER,@i from BOM1 a join @t b on a.PARENT=b.ITEM_CODE
where b.level=@i-1
end
select @j = max([level]) from @t
select @ret = isnull(@ret+',','')+ITEM_CODE+'='+ltrim(QTY_PER)
from @t
where [level] = @j
return @ret
end
go

select t.PARENT,t.ITEM_CODE,f.LOCATION,f.STOCK_QTY P_QTY,f.STOCK_QTY*t.QTY_PER STOCK_QTY,
e.QTY_RATIO,f.STOCK_QTY*t.QTY_PER*e.QTY_RATIO CTM_QTY,t.BOM_UNIT
from(
select a.PARENT,a.ITEM_CODE CODE,a.QTY_PER PER,
isnull(cast(substring(','+dbo.get_proC(a.PARENT)+',',
charindex(','+b.ITEM_CODE+'=',','+dbo.get_proC(a.PARENT)+',')+len(b.ITEM_CODE)+2,
charindex(',',','+dbo.get_proC(a.PARENT)+',',
charindex(','+b.ITEM_CODE+'=',','+dbo.get_proC(a.PARENT)+',')+1)
-(charindex(','+b.ITEM_CODE+'=',','+dbo.get_proC(a.PARENT)+',')+len(b.ITEM_CODE)+2)) as float),a.QTY_PER) QTY_PER,
a.BOM_UNIT,isnull(b.ITEM_CODE,a.ITEM_CODE) ITEM_CODE
from BOM1 a left join 视图1 b
on charindex(','+b.ITEM_CODE+'=',','+dbo.get_proC(a.PARENT)+',')>0
and charindex(','+a.ITEM_CODE+'=',','+dbo.get_proC(a.PARENT)+',')=0
) t join tb1 e on t.ITEM_CODE = e.ITEM_CODE
join 视图1 f on t.PARENT = f.ITEM_CODE


drop table 视图1,tb1,BOM1
drop function get_proC

/*********************

PARENT ITEM_CODE LOCATION P_QTY STOCK_QTY QTY_RATIO CTM_QTY BOM_UNIT
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---------------------- ---------------------- ---------------------- ---------------------- --------------------------------------------------
20-03304-14010 21-03304-14010 CSP1 500 800 0.5 400 G
20-03304-14010 22-03304-14010 CSP1 500 400 0.9 360 G
20-94726-03010 21-94726-03010 CSP1 1600 2560 0.5 1280 PCS
20-94726-03010 22-94726-03010 CSP1 1600 15680 0.8 12544 G


wangxiaofeiwuqiao 2011-07-20
  • 打赏
  • 举报
回复
参考的帖子中与本贴不同的是:原来的视图1包含了所有的ITEM_CODE和QTY_RATIO,是错的。该贴才是正确的。是其中的一个表包含了所有的ITEM_CODE和QTY_RATIO。
wangxiaofeiwuqiao 2011-07-20
  • 打赏
  • 举报
回复
测试数据:

create table 视图1(ITEM_CODE varchar(50),LOCATION varchar(50),STOCK_QTY float,
QTY_RATIO float,CTM_QTY float)

insert into 视图1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('20-03304-14010','CSP1','500','0.15','-7.5')
insert into 视图1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('20-94726-03010','CSP1','1600','0.65','1040')

create table tb1(ITEM_CODE varchar(50),LOCATION varchar(50),STOCK_QTY float,
QTY_RATIO float,CTM_QTY float)
set nocount on
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('20-03304-14010','CSP3','500','0.15','75')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('20-94726-03010','CSP3','1600','0.65','1040')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('21-03304-14010','CSP3','100','0.5','50')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('22-03304-14010','CSP3','200','0.9','180')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('21-94726-03010','CSP3','100','0.5','50')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('22-94726-03010','CSP3','200','0.8','160')
insert into tb1(ITEM_CODE,LOCATION,STOCK_QTY,QTY_RATIO,CTM_QTY)
values('90-94726-03010','CSP3','700','1.2','160')
go

Create table BOM1(PARENT varchar(50),ITEM_CODE varchar(50),
QTY_PER float,BOM_UNIT varchar(50))
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('97-03304-14010','91-03304-14010','1.5','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('91-03304-14010','90-03304-14010','7.5','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('90-03304-14010','20-03304-14010','0.5','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('20-03304-14010','21-03304-14010','1.6','G')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('20-03304-14010','22-03304-14010','0.8','G')

insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('97-94726-03010','90-94726-03010','4.6','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('90-94726-03010','20-94726-03010','8.8','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('20-94726-03010','21-94726-03010','1.6','PCS')
insert into BOM1(PARENT,ITEM_CODE,QTY_PER,BOM_UNIT)
values('20-94726-03010','22-94726-03010','9.8','G')
大气污染是影响公众健康与生态环境的重要问题,精准的空气质量时空预测与污染源贡献度量化是精准治污的关键支撑。针对现有研究多源融合不充分、时空关联刻画不足、预测与源解析割裂三方面缺陷,本文设计实现了城市空气质量时空预测与污染源贡献度分析系统,融合监测、气象、工业排放与交通四类数据,构建基于时空注意力的LSTM(STAM-LSTM)预测模型与基于正定矩阵因子分解(PMF)的源解析模型,形成数据融合-特征工程-预测-源解析-可视化闭环。 系统实现四类数据时空对齐与融合,构建时序与空间邻域特征,以普通克里金插值生成1km网格浓度场;STAM-LSTM引入时空注意力自适应学习站点间污染传输时变权重,以72小时输入预测未来24小时逐小时PM2.5浓度;PMF识别交通、工业、燃煤、扬尘与二次生成五个源因子,量化各源全年贡献度并分析时空演变。 实验表明:STAM-LSTM预测RMSE 24.6、MAE 17.8、R² 0.88,相对LSTM基线(30.2)提升18.5%;普通克里金插值误差8.9,优于反距离加权(11.4);源解析显示交通源28.4%、工业源23.1%、燃煤源19.6%为主要贡献源,冬季燃煤源升至27.3%、早高峰交通源达34.8%,下风向工业源贡献高出上风向8~12个百分点;减排情景显示交通源减排20%可使年均PM2.5下降5.7%,与源贡献度排序一致。 系统按五模块14组件实现,功能测试16项用例全部通过,为大气污染预警、源管控与减排政策制定提供了决策依据。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计与实现 第6章 系统测试与分析 第7章 总结与展望 参考文献 附件-实现指南
基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测研究(Python代码实现)内容概要:本文提出了一种基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测方法,旨在通过结合多种先进深度学习模型的优势,提升在复杂工况下的预测精度与鲁棒性。该方法利用iTransformer捕捉长期时间序列中的全局依赖关系,通过BiGRU模型提取双向时序特征,最后引入KAN(Kernel Attention Network)增强非线性映射与关键特征的自适应加权能力,实现对轴承退化过程的精准建模。文中详细介绍了模型架构设计、训练流程及在公开数据集上的实验验证,结果表明该融合模型相比单一模型在预测精度和稳定性方面均有显著提升。; 适合人群:具备一定机器学习与深度学习基础,从事设备故障诊断、工业大数据分析或智能运维相关领域的研究人员及工程技术人员,尤其适合研究生及以上学历或有相关项目经验的专业人员。; 使用场景及目标:①应用于工业设备状态监测与预测性维护系统中,实现对滚动轴承等关键部件剩余寿命的精准预测;②为复杂时间序列回归任务提供多模型融合的设计思路与技术参考;③推动深度学习在智能制造与工业物联网领域的落地应用。; 阅读建议:建议读者结合Python代码实现部分,深入理解各子模型的接口设计与融合逻辑,重点关注特征融合机制与注意力权重的可视化分析,以便在实际项目中灵活调整与优化模型结构。
几何旋转和天线校准模式对GNSS相位缠绕的组合效应(Matlab代码实现)内容概要:本文研究了几何旋转和天线校准模式对全球导航卫星系统(GNSS)相位缠绕的组合效应,并提供了基于Matlab的代码实现方案。相位缠绕是GNSS高精度定位中的重要误差源,受卫星与接收机相对几何关系及天线相位中心变化的共同影响。文章通过建模分析几何旋转与天线校准参数对相位缠绕的影响机制,探讨二者耦合作用下的修正方法,旨在提升GNSS数据处理的精度与可靠性。研究涵盖了理论建模、算法实现与仿真实验,结合Matlab工具进行数值模拟与结果可视化,验证了所提方法的有效性。; 适合人群:具备一定GNSS基础知识和Matlab编程能力的科研人员、研究生及从事高精度定位相关工作的技术人员。; 使用场景及目标:①用于GNSS高精度数据处理中相位缠绕误差的精确建模与修正;②支持地壳形变监测、精密授时、卫星定轨等对定位精度要求较高的应用场景;③为相关算法开发与教学研究提供可复现的代码实例。; 阅读建议:建议读者结合GNSS误差处理的相关理论,边运行代码边理解算法细节,重点关注几何旋转模型与天线校准参数的集成方式,并可通过修改参数进行敏感性分析以加深理解。

34,876

社区成员

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

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