疑难的汇总问题----(后续问题)

hq0927 2008-12-25 04:44:36



create table tb(单据编号 varchar(10), 商品编号 varchar(10), 架位号 varchar(10), 进货价 decimal(18,1), 日期 datetime)
insert into tb values('J0001' , '12081' , 'A' , 16 , '2008-10-01')
insert into tb values('J0099' , '12081' , 'A' , 15 , '2008-12-01')
insert into tb values('J0009' , '12155' , 'B' , 8 , '2008-09-28')
insert into tb values('J0001' , '11012' , 'A' , 7 , '2008-10-01')
insert into tb values('J0008' , '12081' , 'B' , 15.5 , '2008-11-05')
insert into tb values('J0009' , '11012' , 'C' , 9 , '2008-11-08')
insert into tb values('J0015' , '12081' , 'C' , 16 , '2008-11-07')
go

select 商品编号,
A = (select 进货价 from tb o where 日期 = (select max(日期) from tb n where 商品编号 = m.商品编号 and 架位号 = 'A') and o.商品编号 = m.商品编号),
B = (select 进货价 from tb o where 日期 = (select max(日期) from tb n where 商品编号 = m.商品编号 and 架位号 = 'B') and o.商品编号 = m.商品编号),
C = (select 进货价 from tb o where 日期 = (select max(日期) from tb n where 商品编号 = m.商品编号 and 架位号 = 'C') and o.商品编号 = m.商品编号)
from (select distinct 商品编号 from tb) m

drop table tb

/*

商品编号 A B C
---------- -------------------- -------------------- --------------------
11012 7.0 NULL 9.0
12081 15.0 15.5 16.0
12155 NULL 8.0 NULL

(所影响的行数为 3 行)
*/



如果要变成动态怎么改??


变成 A.B.C.D.E...
A = (select 进货价 from tb o where 日期 = (select max(日期) from tb n where 商品编号 = m.商品编号 and 架位号 = 'A') and o.商品编号 = m.商品编号),
B = (select 进货价 from tb o where 日期 = (select max(日期) from tb n where 商品编号 = m.商品编号 and 架位号 = 'B') and o.商品编号 = m.商品编号),
C = (select 进货价 from tb o where 日期 = (select max(日期) from tb n where 商品编号 = m.商品编号 and 架位号 = 'C') and o.商品编号 = m.商品编号)
D=.....
E...



...全文
43 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2008-12-25
  • 打赏
  • 举报
回复
--这是我增加了几条D,E,F的数据做的测试.
create table tb(单据编号 varchar(10), 商品编号 varchar(10), 架位号 varchar(10), 进货价 decimal(18,1), 日期 datetime)
insert into tb values('J0001' , '12081' , 'A' , 16 , '2008-10-01')
insert into tb values('J0099' , '12081' , 'A' , 15 , '2008-12-01')
insert into tb values('J0009' , '12155' , 'B' , 8 , '2008-09-28')
insert into tb values('J0001' , '11012' , 'A' , 7 , '2008-10-01')
insert into tb values('J0008' , '12081' , 'B' , 15.5 , '2008-11-05')
insert into tb values('J0009' , '11012' , 'C' , 9 , '2008-11-08')
insert into tb values('J0015' , '12081' , 'C' , 16 , '2008-11-07')
insert into tb values('J0008' , '12081' , 'D' , 15.5 , '2008-11-05')
insert into tb values('J0009' , '11012' , 'F' , 9 , '2008-11-08')
insert into tb values('J0015' , '12081' , 'E' , 16 , '2008-11-07')
go

declare @sql varchar(8000)
set @sql = 'select 商品编号 '
select @sql = @sql + ' , max(case 架位号 when ''' + 架位号 + ''' then 进货价 end) [' + 架位号 + ']'
from (select distinct 架位号 from tb) as a
set @sql = @sql + ' from (select * from tb t where 日期 = (select max(日期) from tb where 商品编号 = t.商品编号 and 架位号 = t.架位号)) m group by 商品编号'
exec(@sql)

drop table tb

/*
商品编号 A B C D E F
---------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
11012 7.0 NULL 9.0 NULL NULL 9.0
12081 15.0 15.5 16.0 15.5 16.0 NULL
12155 NULL 8.0 NULL NULL NULL NULL
*/
csdyyr 2008-12-25
  • 打赏
  • 举报
回复
--用动态
create table tb(单据编号 varchar(10), 商品编号 varchar(10), 架位号 varchar(10), 进货价 decimal(18,1), 日期 datetime)
insert into tb values('J0001' , '12081' , 'A' , 16 , '2008-10-01')
insert into tb values('J0099' , '12081' , 'A' , 15 , '2008-12-01')
insert into tb values('J0009' , '12155' , 'B' , 8 , '2008-09-28')
insert into tb values('J0001' , '11012' , 'A' , 7 , '2008-10-01')
insert into tb values('J0008' , '12081' , 'B' , 15.5 , '2008-11-05')
insert into tb values('J0009' , '11012' , 'C' , 9 , '2008-11-08')
insert into tb values('J0015' , '12081' , 'D' , 16 , '2008-11-07')
go

DECLARE @SQL NVARCHAR(4000)
SET @SQL=N''
SELECT @SQL=@SQL+N','+N'MAX(CASE WHEN 架位号='''+架位号+N''' THEN 进货价 END) AS '''+架位号+N''''
FROM TB
GROUP BY 架位号

SET @SQL=N'SELECT 商品编号'+@SQL+N' FROM TB GROUP BY 商品编号'

EXEC(@SQL)

DROP TABLE TB
/*
商品编号 A B C D
---------- -------------------- -------------------- -------------------- --------------------
11012 7.0 NULL 9.0 NULL
12081 16.0 15.5 NULL 16.0
12155 NULL 8.0 NULL NULL
*/
dawugui 2008-12-25
  • 打赏
  • 举报
回复
create table tb(单据编号 varchar(10), 商品编号 varchar(10), 架位号 varchar(10), 进货价 decimal(18,1), 日期 datetime)
insert into tb values('J0001' , '12081' , 'A' , 16 , '2008-10-01')
insert into tb values('J0099' , '12081' , 'A' , 15 , '2008-12-01')
insert into tb values('J0009' , '12155' , 'B' , 8 , '2008-09-28')
insert into tb values('J0001' , '11012' , 'A' , 7 , '2008-10-01')
insert into tb values('J0008' , '12081' , 'B' , 15.5 , '2008-11-05')
insert into tb values('J0009' , '11012' , 'C' , 9 , '2008-11-08')
insert into tb values('J0015' , '12081' , 'C' , 16 , '2008-11-07')
go

declare @sql varchar(8000)
set @sql = 'select 商品编号 '
select @sql = @sql + ' , max(case 架位号 when ''' + 架位号 + ''' then 进货价 end) [' + 架位号 + ']'
from (select distinct 架位号 from tb) as a
set @sql = @sql + ' from (select * from tb t where 日期 = (select max(日期) from tb where 商品编号 = t.商品编号 and 架位号 = t.架位号)) m group by 商品编号'
exec(@sql)

drop table tb

/*
商品编号 A B C
---------- -------------------- -------------------- --------------------
11012 7.0 NULL 9.0
12081 15.0 15.5 16.0
12155 NULL 8.0 NULL
*/

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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