行转列(实现分页与筛选)

产品价格等级表
等级        价格       型号
5           100.00     200116
4            99.00      0010
4            99.00      0012
4            99.00      0013
4             3.00      0031
1             1.00      0001
8           888.00      3222
3          333.00       3222
要求
1.型号对应有不同等级,不同等级价格可以定不同价格。现在要求按型号来分组,显示这个型号的所有等级与所有价格。
2.只要数据库定了某个型号,所有的型号都有这一列(列是动态的)
结果
fPId          level1 level3 level4 level5 level8
0010       NULL NULL 99.00 NULL NULL
0012        NULL NULL 99.00 NULL    NULL
0013        NULL NULL 99.00 NULL    NULL
0031         NULL NULL 3.00 NULL    NULL
200116     NULL NULL NULL 100.00 NULL
3222         NULL 333.00 NULL NULL    888.00

代码最比较少,但却花了我不少时间,感谢csdn的各位帮助了,行转列,原来数据库的操作我懂得真的是太少了。。。
第一步。先直接分析行转列的结果表达式,要什么样的SQL语句才能得到这样的结果呢?

select 
fPId, 
max(case fPPLevel when '1' then fPPPrices else null end[level1]
max(case fPPLevel when '3' then fPPPrices else null end[level3]
max(case fPPLevel when '4' then fPPPrices else null end[level4]
max(case fPPLevel when '5' then fPPPrices else null end[level5]
max(case fPPLevel when '8' then fPPPrices else null end[level8]
from vProPriceLevel 
group by fPId 

第二步,可以看出这样的表达式是没有规律的,如果真的要将比如说1-10等级,全部在里case表达式里列出,那就不是动态列,成静态了。
如果客户要求增加等级,或者不显示不需要的等级呢?要转成动态,没办法另外想办法了

 

Code

第三步,上面的输出结果正好是我们想要的 sql语句,动态的语句只能用存储过程去实现了.行转列到这里已经完成了,相信后面的操作大家都会.最终项目需要的不只这么简单,
添加了按样本多选与按产品型号(产品名)模糊查询的要求.再加上分页,并返回总记录数,最终形式如下:

Code

 

posted @ 2009-06-30 10:14  -飛天蟲  阅读(572)  评论(0编辑  收藏  举报