日期:2014-05-18  浏览次数:20383 次

急,SQL数据转换,神阿救救我吧
表MMM
RouteCode RouteName DriveDate Tim ShapeCode Amount 11 12 13 14 15 16 17
3 a店 2007/10/7 2 11 65 null null null null null null
3 a店 2007/10/7 2 13 65 null null null null null null
3 a店 2007/10/7 2 15 10 null null null null null null
4 b店 2007/10/7 1 15 5 null null null null null null
4 b店 2007/10/7 1 13 5 null null null null null null
4 b店 2007/10/7 1 11 5 null null null null null null
5 c店 2007/10/7 1 11 15 null null null null null null
5 c店 2007/10/7 1 13 15 null null null null null null
5 c店 2007/10/7 1 15 15 null null null null null null
3 a店 2007/10/8 1 11 10 null null null null null null
4 b店 2007/10/8 1 11 11 null null null null null null
变成
RouteCode RouteName DriveDate Tim 11 12 13 14 15 16 17
3 a店 2007/10/7 2 65 0 65 0 10 0 0
4 b店 2007/10/7 1 5 0 5 0 5 0 0
5 c店 2007/10/7 1 15 15 0 15 0 15 0
3 a店 2007/10/8 1 10 10 0 0 0 0 0
4 b店 2007/10/8 1 11 11 0 0 0 0 0
这些数据都是从别的表里转过来的,也就是说原表里面有什么样的ShapeCode类型的Amount就把他们转到后面的11 12。。。列中,没有就
显示0,实现不了显示空也可以。我已经实现了从原表里面面动态的提取ShapeCode和Amount
现在就是把MMM表中的ShapeCode和Amount也那样实现。
他们说是这样实现,把ShapeCode赋给变量,然后用Max语句查找后面相应的列,然后填入Amount我捉摸到现在也没有个头绪。
神阿,救救我把

------解决方案--------------------
好像楼主没有表达清楚:
如果只是去掉null为0:isnull(列名,0)
--
转到后面的11 12

update 表
set [11]=amount,[12]=amount
------解决方案--------------------
--动态SQL,即你不知道shapecode的值有哪些?
declare @sql varchar(8000)
set @sql = 'select RouteCode,RouteName,DriveDate,Tim'
select @sql = @sql + ' , sum(case shapecode when ''' + cast(shapecode as varchar) + ''' then amount else 0 end) [' + cast(shapecode as varchar) + ']'
from (select distinct shapecode from mmm) as a
set @sql = @sql + ' from mmm group by RouteCode,RouteName,DriveDate,Tim'
exec(@sql)