日期:2014-05-17 浏览次数:20968 次
select user_id, user_name, count(case when fun_id=1 then 1 end) f1, count(case when fun_id=2 then 1 end) f2, count(case when fun_id=3 then 1 end) f3, ... count(case when fun_id=12 then 1 end) f12 from a group by user_id, user_name
------解决方案--------------------
如果是水晶报表的话可以用“交叉表专家”。
sql语句实现的话,先在开发环境中获得所有用户功能套餐,
再按照
select user_id, user_name,
count(case when fun_id=1 then 1 end) f1,
count(case when fun_id=2 then 1 end) f2,
count(case when fun_id=3 then 1 end) f3,
...
count(case when fun_id=12 then 1 end) f12
from a
group by user_id, user_name
的格式在开发环境中把sql拼接好,最后执行。
------解决方案--------------------
1.如果表 b 就这12个功能模块 ,一直不会变化的话,你可以使用楼上的方法 ,使用 case 或者decode 来穷举
2.如果表 b 的功能模块会变化 ,那么一个sql应该是不能解决的吧 ,如果你是使用别的开发工具来做报表的话,pb中有crosstab 可以很方便的行转列 ;另外一种方式就是 使用存储过程 ,返回 结果集,或者动态建表,把结果集插进去吧