求MSSQL中如何实现。(100)

  • 主题发起人 主题发起人
  • 开始时间 开始时间

Unregistered / Unconfirmed
GUEST, unregistred user!
有一表,形式如下:商场名称 商品 数量AAA 毛巾 100AAA 牙刷 50BBB 毛巾 80BBB 篮球 10用SQL能否转化为:商场名称 毛巾 牙刷 篮球AAA 100 50 0BBB 80 0 10如果在客户端用循环肯定可以实现,但在SQL中能否实现?
 
在服务器端用存储过程。
 
select 商场名称,sum(case 商品 when '毛巾' then 数量 else 0 end) as 毛巾,sum(case 商品 when '牙刷' then 数量 else 0 end) as 牙刷,sum(case 商品 when '篮球' then 数量 else 0 end) as 篮球from 表group by 商场名称
 
楼上你写的语句不是通用的,如果产品多了怎么办?他他是典型的行转列,需要用游标的.
 
李翔鹏高人,请详细说说啊。肥羊的方法我知道,不适用。
 
商品多了用程序拼个SQL语句而已,有必要用游标?
 
商品多了用程序拼个SQL语句而已,有必要用游标?用代码循环和用游标循环都一样阿
 
错了,代码只是生成SQL语句,并不是查出数据再行转列取出商品列表,一个for循环就能生成case语句了,游标是可以,但麻烦得多
 
楼上的你看着:if object_id('table1') >0 drop table table1create table table1 (商场名称 varchar(100),商品 varchar(100),数量 int )insert into table1 values ('AAA','毛巾',100)insert into table1 values ('AAA','牙刷',50)insert into table1 values ('BBB','毛巾',80)insert into table1 values ('BBB','篮球',10)insert into table1 values ('AAA','毛巾',50)insert into table1 values ('AAA','牙刷',50)insert into table1 values ('BBB','篮球',40)insert into table1 values ('AAA','手机',50)insert into table1 values ('BBB','手机',50)godeclare @sql varchar(5000)declare @goods varchar(100)declare mycur1 cursor for select distinct 商品 from table1 open mycur1 set @sql='select 商场名称,'fetch next from mycur1 into @goods while @@fetch_status=0 begin set @sql=@sql+'sum(case 商品 when '''+@goods+''' then 数量 else 0 end ) as '+@goods+',' fetch next from mycur1 into @goods endset @sql=left(@sql,Len(@sql)-1) --去掉最后一个逗号 set @sql=@sql+' from table1 group by 商场名称 'print @sqlexec(@sql) close mycur1 deallocate mycur1 --以上SQL语句在SQL2005下测试通过
 
本人同意轻舞肥羊的说法,用程序拼个SQL语句,用游标对服务器会有大的负担,不如在客户端生成SQL语句好一点。
 
declare @sql varchar(2000)set @sql='select 商场名称'select @sql=@sql+',sum(case 商品 when '''+商品+''' then 数量 else 0 end) '''+商品+'''' from (select distinct(商品) from zzzz) as bselect @sql=@sql+' from zzzz group by 商场名称'exec(@sql)
 
楼上的你真牛阿!第一次学到这样的写法阿,不错.
 
经典,学了一招!
 
真是人材啊!!!!!!!!!!!!!!!!
 
To fhuibo,:这select @sql=@sql+',sum(case 商品 when '''+商品+''' then 数量 else 0 end) '''+商品+'''' from (select distinct(商品) from zzzz) as b 句怎么解释?指点下,第一次看到这种写法
 
动态拼接sql语句
 
后退
顶部