接着上面IP地址字段查询问题,那就是统计结果的展示格式。朋友要的格式是:
城市1 城市2 城市3 城市4
2010-06 0 1 0 0
2010-08 0 1 0 2
2010-07 0 0 1 0
2010-05 1 0 0 0
时间和记录都是从SINO_USER查询出来的,而列名是从SINO_IP表中查询出来。本来用枚举法,直接把所有城市都用CASE WHEN进行判断一遍就OK,但是,SINO_IP表中城市个数是不定的,就是说今天查询出来时4个城市,明天也许就是5个城市。这就需要我们的统计能支持列的动态添加。我第一想到的是试图(VIEW),但是这个试图怎么写,才能保证动态生成列呢,这就要使用动态SQL,而动态SQL在哪里生成能,嘿嘿,说了半天总算到正题了,没错,就是存储过程。可以使用存储过程动态生成VIEW,然后根据VIEW来查询。
1、数据基础
表结构我就不写了,和上篇博文一样的。
2、问题分析
select s.dd
,sum(city1) 城市1
,sum(city2) 城市2
,sum(city3) 城市3
,sum(city4) 城市4
,sum(city5) 城市5
from (select substr(to