首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

先感激大侠们,求一条sql语句,该怎么处理

2012-03-12 
先感激大侠们,急求一条sql语句HTML code现在有一张表订单编号 订单数量订单时间物品编号交货时间 A0000150

先感激大侠们,急求一条sql语句

HTML code
现在有一张表订单编号 订单数量  订单时间  物品编号  交货时间 A00001   50      2011-11-02  W001    2011-12-02 A00001   60      2011-12-02  W001    2011-12-07 A00001   70      2012-01-02  W001    2012-02-04 A00002   80      2011-12-02  W002    2011-12-02 A00003   90      2011-12-02  W002   2011-12-02要求是根据当前时间获取最近的一次下的订单数据。订单编号        订单数量    订单时间    物品编号     交货时间 A00001            70      2012-01-02     W001       2012-02-04 A00002/ A00003   170      2011-12-02     W002       2011-12-02/2011-12-02

请教大侠们这个sql该怎么写?
由其是最近一次的该怎么写,合并的会写。


[解决办法]
唉,沉痛的表示看不懂题目~
[解决办法]
"根据当前时间获取最近的一次下的订单数据"

--> 当前时间(01/13)最近的一次下的订单数据? 预想结果是怎么来的.
[解决办法]
SQL code
declare @表 table (    订单编号 varchar(6),    订单数量 int,    订单时间 datetime,    物品编号 varchar(4),    交货时间 datetime)insert into @表select 'a00001',50,'2011-11-02','w001','2011-12-02' union allselect 'a00001',60,'2011-12-02','w001','2011-12-07' union allselect 'a00001',70,'2012-01-02','w001','2012-02-04' union allselect 'a00002',80,'2011-12-02','w002','2011-12-02' union allselect 'a00003',90,'2011-12-02','w002','2011-12-02'select  订单编号 ,        订单数量 ,        订单时间 = convert(varchar(10), 订单时间, 120) ,        物品编号 ,        交货时间 = convert(varchar(10), 交货时间, 120)from    @表 twhere   订单时间 = ( select max(订单时间)                 from   @表                 where  物品编号 = t.物品编号               )/*订单编号   订单数量        订单时间       物品编号 交货时间------ ----------- ---------- ---- ----------a00002 80          2011-12-02 w002 2011-12-02a00003 90          2011-12-02 w002 2011-12-02a00001 70          2012-01-02 w001 2012-02-04*/
[解决办法]
SQL code
if object_id('[tb]') is not null drop table [tb]gocreate table [tb]([订单编号] varchar(6),[订单数量] int,[订单时间] varchar(10),[物品编号] varchar(4),[交货时间] varchar(10))insert [tb]select 'A00001',50,'2011-11-02','W001','2011-12-02' union allselect 'A00001',60,'2011-12-02','W001','2011-12-07' union allselect 'A00001',70,'2012-01-02','W001','2012-02-04' union allselect 'A00002',80,'2011-12-02','W002','2011-12-02' union allselect 'A00003',90,'2011-12-02','W002','2011-12-02';with t1 as(select * from tb t where 订单时间=(select top 1 订单时间 from tb where 订单编号=t.订单编号 and 订单时间<getdate() order by 订单时间 desc))select 订单编号=stuff((select '/'+订单编号 from t1 where 订单时间=t.订单时间 and 物品编号=t.物品编号 for xml path('')),1,1,''),订单数量=sum(订单数量),订单时间,物品编号,交货时间=stuff((select '/'+交货时间 from t1 where 订单时间=t.订单时间 and 物品编号=t.物品编号 for xml path('')),1,1,'')from t1 tgroup by 订单时间,物品编号/**订单编号        订单数量        订单时间       物品编号 交货时间A00001            70                2012-01-02        W001    2012-02-04A00002/A00003    170                2011-12-02        W002    2011-12-02/2011-12-02**/
[解决办法]
SQL code
create table  #tb(    订单编号 varchar(6),    订单数量 int,    订单时间 date,    物品编号 varchar(4),    交货时间 date)insert into #tbselect 'a00001',50,'2011-11-02','w001','2011-12-02' union allselect 'a00001',60,'2011-12-02','w001','2011-12-07' union allselect 'a00001',70,'2012-01-02','w001','2012-02-04' union allselect 'a00002',80,'2011-12-02','w002','2011-12-02' union allselect 'a00003',90,'2011-12-02','w002','2011-12-02'goselect * from #tbgowith cte as(select 订单编号,订单数量,订单时间,物品编号,交货时间 from(select rowid=ROW_NUMBER()over(partition by 订单编号 order by 订单时间),* from #tb) a where rowid=1) select 订单编号=STUFF((select '/'+订单编号 from cte where 物品编号=m.物品编号 for xml path('')),1,1,''),订单数量=sum(订单数量),订单时间,物品编号,交货时间=stuff((select '/'+convert(varchar(10),交货时间) from cte where  物品编号=m.物品编号 for xml path('')),1,1,'')from cte mgroup by 订单时间,物品编号订单编号    订单数量    订单时间    物品编号    交货时间a00001    50    2011-11-02    w001    2011-12-02a00002/a00003    170    2011-12-02    w002    2011-12-02/2011-12-02(2 行受影响) 


[解决办法]

SQL code
declare @表 table (    订单编号 varchar(6),    订单数量 int,    订单时间 datetime,    物品编号 varchar(4),    交货时间 datetime)insert into @表select 'a00001',50,'2011-11-02','w001','2011-12-02' union allselect 'a00001',60,'2011-12-02','w001','2011-12-07' union allselect 'a00001',70,'2012-01-02','w001','2012-02-04' union allselect 'a00002',80,'2011-12-02','w002','2011-12-02' union allselect 'a00003',90,'2011-12-02','w002','2011-12-02'select stuff((select '/'+订单编号 from @表 where 订单时间=a.订单时间 and 物品编号=a.物品编号 for xml path('')),1,1,'') as 订单编号,        sum(a.订单数量) as 订单数量,        a.订单时间,        a.物品编号,        stuff((select '/'+cast(交货时间 as nvarchar(20)) from @表 where 订单时间=a.订单时间 and 物品编号=a.物品编号 for xml path('')),1,1,'') as 交货时间  from @表 as a  join(select 订单编号,max(订单时间) as 最近订单时间  from @表group by 订单编号) as b on a.订单编号=b.订单编号 and a.订单时间=b.最近订单时间group by a.订单时间,        a.物品编号
[解决办法]
我主要是for xml path('')不明白,原来是2005以后才有的呀,看来不能总是埋头编程序了,也得逛逛论坛,回答问题只也能学到东西哟,现在我一工作就是后半夜根本没时间逛论坛,这回是CSDN账户出问题,才回来转转,记得当初,这得有快十年了,我天天不知道来这逛多少次,那时能力也不如现在,但是总是愿意看帖,有我会的就答,哎现在忙了,睡觉都没什么时间,逛论坛更是不容易了。

热点排行