sql Transact for good Sample


有个SQL语句想请教
OrderNo     OrderDate    WareNo      WareName     Spec       InQuantity        OutQuantity
001         2005-12-1     F01          光驱        52X          10
002         2005-12-5     F01          光驱        52X                             2
003         2005-12-9     F01          光驱        52X          4
我要得到如下结果
OrderNo     OrderDate    WareNo      WareName     Spec       InQuantity        OutQuantity      LibQuantity
001         2005-12-1     F01          光驱        52X          10                                 10
002         2005-12-5     F01          光驱        52X                             2                8
003         2005-12-9     F01          光驱        52X          4                                  12

其中,LibQuantity = InQuantity - OutQuantity

the key is;

select OrderNo,OrderDate,WareNo,WareName,Spec,InQuantity,OutQuantity,
(select sum(b.InQuantity)-sum(b.OutQuantity) from 表 as b where b.OrderDate<=a.OrderDate and a.WareNo=b.WareNo) as LibQuantity
from 表 as a


create database backup to one disk or path
create pro myBack
@databasename varchar(20)
declare @sqlstr varchar(100)
set sqlstr='  backup database '+@databasename+' to disk= '    'C:/path'    '  '

exec(@sqlstr)

go


我现在有两个表,A和B
根据A中的字段WW跟B中的字段XX关联
但是现在有条件就是,当WW字段是以PO打头时,比如PO0504123,则要在PO0504123前加“MI-”,即成为“MI-PO0504123”,再与B中的XX字段关联;而当WW字段是其他内容时,就直接跟XX关联。
我的语句是这样的:
select * from a left outer join b on (case when left(a.ww,2)='po' then ('MI-'+a.ww) else a.ww else)=b.xx
也试过这样:
select * from a left outer join b on (case when left(a.ww,2)='po' then ('MI-'+a.ww)=b.xx else a.ww else=b.xx)
都是报错,是不是这样不能用CASE?
那我该怎么写,请各位指点。小弟在线等。谢谢
PS:我也用过函数,但是速度很慢,很久都没找出数据,是不是我没写好函数呢:)

the key is:

select   *  from
(select *,case when left(a.ww,2)='po' then ('MI-'+a.ww) else a.ww end as new_ww from A) A left join B
 on A.new_ww=B.xx

select * from a left outer join b on (case when left(a.ww,2)='po' then ('MI-'+a.ww) else a.ww end)=b.xx
我都测试正常呀?是不是语法或者是字段名写错了?

exec(@sqlstr)

go


我现在有两个表,A和B
根据A中的字段WW跟B中的字段XX关联
但是现在有条件就是,当WW字段是以PO打头时,比如PO0504123,则要在PO0504123前加“MI-”,即成为“MI-PO0504123”,再与B中的XX字段关联;而当WW字段是其他内容时,就直接跟XX关联。
我的语句是这样的:
select * from a left outer join b on (case when left(a.ww,2)='po' then ('MI-'+a.ww) else a.ww else)=b.xx
也试过这样:
select * from a left outer join b on (case when left(a.ww,2)='po' then ('MI-'+a.ww)=b.xx else a.ww else=b.xx)
都是报错,是不是这样不能用CASE?
那我该怎么写,请各位指点。小弟在线等。谢谢
PS:我也用过函数,但是速度很慢,很久都没找出数据,是不是我没写好函数呢:)

the key is:

select   *  from
(select *,case when left(a.ww,2)='po' then ('MI-'+a.ww) else a.ww end as new_ww from A) A left join B
 on A.new_ww=B.xx

select * from a left outer join b on (case when left(a.ww,2)='po' then ('MI-'+a.ww) else a.ww end)=b.xx
我都测试正常呀?是不是语法或者是字段名写错了?

exec(@sqlstr)

go

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值