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

阅读更多
个人分类: DB2
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭