日期:2014-05-17  浏览次数:20523 次

行列转化问题


    city    dianhao  name    price
    北京     1       西瓜     12
    上海     1       西瓜     11
    南昌     1       西瓜     10
    上海     1       冬瓜     13
    武汉     1       冬瓜     12

    上海     2       冬瓜     11
    武汉     2       冬瓜     10
..........
.......
转化成
动态生成......
  dianhao     在北京是否有(西瓜)  在上海是否有(西瓜)  (西瓜)的最低价格     在北京是否有(冬瓜)  在上海是否有(冬瓜)    (冬瓜)的最低价格

1             1         1            10        0   1    12 (此价格是此dianhao里面最低的)            
2             0         0            null      0   1    10

(西瓜)这个是变量 还有很多 比如黄瓜什么的.. 表头只要北京  上海  其他城市只拿最低价格。







------解决方案--------------------
declare @s varchar(max)
set @s=''
 
Select    @s=@s+','+quotename('在'+city+'是否有'+name)+'=max(case when [city]='+quotename(city,'''')+' and name= '+quotename(name,'''')+' then 1 else null end)'
--+','+quotename(name+'最低价格')+'=min(case when name= '+quotename(name,'''')+' then price else null end)'
from [huang] group by city,name
SELECT @s=@s+','+quotename(name+'最低价格')+'=min(case when name= '+quotename(name,'''')+' then price else null end)'
FROM [huang]
GROUP BY name
exec('select [dianhao] '+@s+' from [huang] group by [dianhao]')
/*
dianhao     在北京是否有西瓜    在南昌是否有西瓜    在上海是否有冬瓜    在上海是否有西瓜    在武汉是否有冬瓜    冬瓜最低价格      西瓜最低价格
----------- ----------- ----------- ----------- ----------- ----------- -----------&