看不明白的简单SQL语句,难!有谁懂,请解释一下,特别是SUM段declare @sql varchar(8000)
set @sql='select 商品名称'
select @sql=@sql+', sum(case 店名 when'''+店名+'''then 小计 else 0 end) ['+店名+']'
from(select distinct 店名 from A )asa
set @sql=@sql+'from A group by 商品名称'
exec(@sql)
set @sql='select 商品名称'
select @sql=@sql+', sum(case 店名 when'''+店名+'''then 小计 else 0 end) ['+店名+']'
from(select distinct 店名 from A )asa
set @sql=@sql+'from A group by 商品名称'
exec(@sql)
set @sql='select 商品名称'
select @sql=@sql+', sum(case 店名 when'''+店名+'''then 小计 else 0 end) ['+店名+']'
from(select distinct 店名 from A )asa
set @sql=@sql+'from A group by 商品名称'
print @sql
--动态行列转换的写法
declare @sql varchar(8000)
set @sql='select 商品名称'
select @sql=@sql+', sum(case 店名 when'''+店名+'''then 小计 else 0 end) ['+店名+']'
from(select distinct 店名 from A )as a
set @sql=@sql+'from A group by 商品名称'
exec(@sql)
--
select 商品名称,
case 店名 when 店名1 then 小计值1 else 0 end,
case 店名 when 店名2 then 小计值2 else 0 end,
case 店名 when 店名3 then 小计值3 else 0 end
from A group by 商品名称
--你看看静态的不就知道动态的什么意思了
--part1.
set @sql='select 商品名称'
--part2.
--以下这部分是为了构造列,你看到from后面是从A表中distinct店名,这样在select语句中用@sql=@sql+....
--这种形式会根据店名的个数进行循环拼接,里面那个sum语句是为了part1和part3服务的.
select @sql=@sql+', sum(case 店名 when'''+店名+'''then 小计 else 0 end) ['+店名+']'
from
(
select distinct 店名 from A
)asa
--part3.
set @sql=@sql+'from A group by 商品名称'
exec(@sql)我这样解释,你应该明白了吧
高人呀,我就是怎么看都不能明白循环拼接,书上网上都没有说,还有那个 ASA 查百度都找不到解释