存储过程?

azsoft 2003-12-06 09:01:25
邹建:

declare @t1 table(cname varchar(2),sl int,ph varchar(10))
insert into @t1
select 'a',150,'010101'
union all select 'a',200,'020304'
union all select 'b',300,'040506'

declare @t2 table(cname varchar(2),sl int,ph varchar(10))
insert into @t2
select 'a',150,'020304'
union all select 'b',200,'040506'


--数据处理
declare @t table(cname varchar(2),sl int,ph varchar(10),sl1 int,sl2 int)
insert into @t(cname,ph,sl1,sl2)
select a.cname,a.ph,a.sl,b.sl
from @t1 a join @t2 b on a.cname=b.cname
order by a.cname

declare @cname varchar(2),@sl int,@s2 int
update @t set @sl=case cname when @cname then @s2 else sl2 end
,sl=case when @sl>sl1 then sl1 else @sl end
,@s2=@sl-sl1,@cname=cname

--显示处理结果
select cname,sl,ph from @t where sl>0
结果为:
cname sl ph
-------------------------
a 150 010101
b 200 040506

我想要的结果为:也就是 ph为(020304)的值不足时,在去减其他的ph的值
cname sl ph
-------------------------
a 150 020304
b 200 040506







...全文
29 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
azsoft 2003-12-06
  • 打赏
  • 举报
回复
结帖
azsoft 2003-12-06
  • 打赏
  • 举报
回复
久闻 j9988(j9988)老师的大名,谢谢你帮忙
azsoft 2003-12-06
  • 打赏
  • 举报
回复
你用以下测试:得到我的结果:
1、如果@t2 也就是ph=020304 的sl=250 时的结果为

cname sl ph
-------------------------
a 200 020304
a 50 010101
b 200 040506

2、1、如果@t2 也就是ph=020304 的sl=150 时的结果为
cname sl ph
-------------------------
a 150 020304
b 200 040506


declare @t1 table(cname varchar(2),sl int,ph varchar(10))
insert into @t1
select 'a',150,'010101'
union all select 'a',200,'020304'
union all select 'b',300,'040506'

declare @t2 table(cname varchar(2),sl int,ph varchar(10))
insert into @t2
select 'a',150,'020304'
union all select 'b',200,'040506'


--数据处理
declare @t table(cname varchar(2),sl int,ph varchar(10),sl1 int,sl2 int)
insert into @t(cname,ph,sl1,sl2)
select a.cname,a.ph,a.sl,b.sl
from @t1 a join @t2 b on a.cname=b.cname
order by a.cname

declare @cname varchar(2),@sl int,@s2 int
update @t set @sl=case cname when @cname then @s2 else sl2 end
,sl=case when @sl>sl1 then sl1 else @sl end
,@s2=@sl-sl1,@cname=cname

--显示处理结果
select cname,sl,ph from @t where sl>0
j9988 2003-12-06
  • 打赏
  • 举报
回复
一样的问题,你先说一下,具体@t1,@t2代表什么,想得到什么结果(干什么)

declare @t table(cname varchar(2),sl int,ph varchar(10),sl1 int,sl2 int)
insert into @t(cname,ph,sl1,sl2)
select a.cname,a.ph,a.sl,b.sl
from @t1 a join @t2 b on a.cname=b.cname
order by a.cname,(case when A.ph=B.ph then 0 else 1 end)

相以得到结果,但不知UPDATE语句想实现的功能。

34,874

社区成员

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

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