读书人

求sql语句!解决方案

发布时间: 2012-02-28 13:06:36 作者: rapoo

求sql语句!!!!!!!!!!!
表 A idbo dd Sdate stime
00000812007/09/2608:00:00
00000812007/09/2612:30:00
00000812007/09/2613:30:00
00000812007/09/2617:00:00
00001112007/09/2607:30:00
00001112007/09/2611:30:00
00001112007/09/2611:45:00
00001112007/09/2616:30:00
00001112007/09/2616:45:00
00001112007/09/2621:00:00
00000812007/09/2708:20:07
00000812007/09/2712:20:00
00000812007/09/2713:00:00
00000812007/09/2717:30:00
得到查询结果
idno Sdate T1 T2 T3 T4 t5 T6 T7 T8
000008 2007/09/26 08:00:00 12:30:00 13:30:00 17:00:00
000011 2007/09/26 07:30:00 11:30:00 11:45:00 16:30:00 16:45:00 21:00:00
000008 2007/09/27 08:20:07 12:20:00 13:00:00 17:30:00

[解决办法]
declare @sql varchar(8000)
set @sql = 'select idno,Sdate '
select @sql = @sql + ' , max(case px when ' ' ' + cast(px as varchar) + ' ' ' then stime else ' ' ' ' end) [T ' + cast(px as varchar) + '] '
from (select distinct px from (select px=(select count(1) from a where idbo=t.idbo and Sdate = t.Sdate and stime <t.stime)+1 , * from a t) m) as a
set @sql = @sql + ' from (select px=(select count(1) from a where idbo=t.idbo and Sdate = t.Sdate and stime <t.stime)+1 , * from a t) m group by idno,Sdate '
exec(@sql)
[解决办法]
create table tb(idbo varchar(10),dd int,Sdate varchar(10),stime varchar(10))
insert into tb values( '000008 ',1, '2007/09/26 ', '08:00:00 ')
insert into tb values( '000008 ',1, '2007/09/26 ', '12:30:00 ')
insert into tb values( '000008 ',1, '2007/09/26 ', '13:30:00 ')
insert into tb values( '000008 ',1, '2007/09/26 ', '17:00:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '07:30:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '11:30:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '11:45:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '16:30:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '16:45:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '21:00:00 ')


insert into tb values( '000008 ',1, '2007/09/27 ', '08:20:07 ')
insert into tb values( '000008 ',1, '2007/09/27 ', '12:20:00 ')
insert into tb values( '000008 ',1, '2007/09/27 ', '13:00:00 ')
insert into tb values( '000008 ',1, '2007/09/27 ', '17:30:00 ')
go
declare @sql varchar(8000)
set @sql = 'select idbo,Sdate '
select @sql = @sql + ' , max(case px when ' ' ' + cast(px as varchar) + ' ' ' then stime else ' ' ' ' end) [T ' + cast(px as varchar) + '] '
from (select distinct px from (select px=(select count(1) from tb where idbo=t.idbo and Sdate = t.Sdate and stime <t.stime)+1 , * from tb t) m) as a
set @sql = @sql + ' from (select px=(select count(1) from tb where idbo=t.idbo and Sdate = t.Sdate and stime <t.stime)+1 , * from tb t) m group by idbo,Sdate '
exec(@sql)

/*
idbo Sdate T1 T2 T3 T4 T5 T6
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
000008 2007/09/26 08:00:00 12:30:00 13:30:00 17:00:00
000011 2007/09/26 07:30:00 11:30:00 11:45:00 16:30:00 16:45:00 21:00:00
000008 2007/09/27 08:20:07 12:20:00 13:00:00 17:30:00
*/

drop table tb

/*
总出货数
-----------
4

(所影响的行数为 1 行)

*/


[解决办法]
--上面后面那点东西是多余的.不好意思.

create table tb(idbo varchar(10),dd int,Sdate varchar(10),stime varchar(10))
insert into tb values( '000008 ',1, '2007/09/26 ', '08:00:00 ')
insert into tb values( '000008 ',1, '2007/09/26 ', '12:30:00 ')
insert into tb values( '000008 ',1, '2007/09/26 ', '13:30:00 ')
insert into tb values( '000008 ',1, '2007/09/26 ', '17:00:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '07:30:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '11:30:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '11:45:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '16:30:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '16:45:00 ')
insert into tb values( '000011 ',1, '2007/09/26 ', '21:00:00 ')
insert into tb values( '000008 ',1, '2007/09/27 ', '08:20:07 ')
insert into tb values( '000008 ',1, '2007/09/27 ', '12:20:00 ')
insert into tb values( '000008 ',1, '2007/09/27 ', '13:00:00 ')
insert into tb values( '000008 ',1, '2007/09/27 ', '17:30:00 ')
go
declare @sql varchar(8000)
set @sql = 'select idbo,Sdate '
select @sql = @sql + ' , max(case px when ' ' ' + cast(px as varchar) + ' ' ' then stime else ' ' ' ' end) [T ' + cast(px as varchar) + '] '
from (select distinct px from (select px=(select count(1) from tb where idbo=t.idbo and Sdate = t.Sdate and stime <t.stime)+1 , * from tb t) m) as a
set @sql = @sql + ' from (select px=(select count(1) from tb where idbo=t.idbo and Sdate = t.Sdate and stime <t.stime)+1 , * from tb t) m group by idbo,Sdate '
exec(@sql)

/*
idbo Sdate T1 T2 T3 T4 T5 T6
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------


000008 2007/09/26 08:00:00 12:30:00 13:30:00 17:00:00
000011 2007/09/26 07:30:00 11:30:00 11:45:00 16:30:00 16:45:00 21:00:00
000008 2007/09/27 08:20:07 12:20:00 13:00:00 17:30:00
*/

drop table tb


[解决办法]
Declare @sql varchar(8000)
Set @sql= ' '
Select @sql=@sql+ ',Max(Case When Pid= ' ' '+rtrim(Pid)+ ' ' ' Then stime Else ' ' ' ' End) As [T '+rtrim(Pid)+ '] '
From (Select idno,Sdate,stime,Pid=(Select Count(1) From A Where idno=T.idno And Sdate=T.Sdate And stime <=T.stime) From A As T) As TT
Group By Pid
Exec( 'Select idno,Sdate '+@sql+ 'From (Select idno,Sdate,stime,
Pid=(Select Count(1)
From A
Where idno=T.idno And Sdate=T.Sdate And stime <=T.stime)
From A As T) As TT Group By idno,Sdate ')
[解决办法]
---创建测试环境
Create Table A(idno varchar(10),dd int,Sdate varchar(10),stime varchar(10))
Insert A Select '000008 ',1, '2007/09/26 ', '08:00:00 '
Union All Select '000008 ',1, '2007/09/26 ', '12:30:00 '
Union All Select '000008 ',1, '2007/09/26 ', '13:30:00 '
Union All Select '000008 ',1, '2007/09/26 ', '17:00:00 '
Union All Select '000011 ',1, '2007/09/26 ', '07:30:00 '
Union All Select '000011 ',1, '2007/09/26 ', '11:30:00 '
Union All Select '000011 ',1, '2007/09/26 ', '11:45:00 '
Union All Select '000011 ',1, '2007/09/26 ', '16:30:00 '
Union All Select '000011 ',1, '2007/09/26 ', '16:45:00 '
Union All Select '000011 ',1, '2007/09/26 ', '21:00:00 '
Union All Select '000008 ',1, '2007/09/27 ', '08:20:07 '
Union All Select '000008 ',1, '2007/09/27 ', '12:20:00 '
Union All Select '000008 ',1, '2007/09/27 ', '13:00:00 '
Union All Select '000008 ',1, '2007/09/27 ', '17:30:00 '

---查询结果
Declare @sql varchar(8000)
Set @sql= ' '
Select @sql=@sql+ ',Max(Case When Pid= ' ' '+rtrim(Pid)+ ' ' ' Then stime Else ' ' ' ' End) As [T '+rtrim(Pid)+ '] '
From (Select idno,Sdate,stime,Pid=(Select Count(1) From A Where idno=T.idno And Sdate=T.Sdate And stime <=T.stime) From A As T) As TT
Group By Pid
Exec( 'Select idno,Sdate '+@sql+ '
From (Select idno,Sdate,stime,
Pid=(Select Count(1)
From A
Where idno=T.idno And Sdate=T.Sdate And stime <=T.stime)
From A As T) As TT Group By idno,Sdate ')
---清除测试环境
Drop Table A
---结果
/*
(所影响的行数为 14 行)

idno Sdate T1 T2 T3 T4 T5 T6
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
000008 2007/09/26 08:00:00 12:30:00 13:30:00 17:00:00
000011 2007/09/26 07:30:00 11:30:00 11:45:00 16:30:00 16:45:00 21:00:00
000008 2007/09/27 08:20:07 12:20:00 13:00:00 17:30:00

*/

读书人网 >SQL Server

热点推荐