看不明白的简单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)

解决方案 »

  1.   

    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 商品名称'
    print @sql
      

  2.   

    要的是分段解释含义,要不然永远不会写SQL语句
      

  3.   

    你在后面加个print @sql查看下最后执行的SQL语句就清楚了。
      

  4.   


    --动态行列转换的写法
    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 商品名称
    --你看看静态的不就知道动态的什么意思了 
      

  5.   

    我就做次好人吧,declare @sql varchar(8000)
    --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)我这样解释,你应该明白了吧
      

  6.   


    高人呀,我就是怎么看都不能明白循环拼接,书上网上都没有说,还有那个 ASA 查百度都找不到解释