将一个表的查询结果作为另一查询的字段(动态查询列)

本文介绍如何在SQL中使用存储过程动态生成视图,以解决城市数量不确定时的统计问题。通过循环遍历SINO_IP表,生成SUM和CASE WHEN语句,动态构建查询SQL,从而实现列的动态添加。最终通过执行存储过程,创建的视图能够根据SINO_IP表中的城市数量自适应调整列的数量和名称。
摘要由CSDN通过智能技术生成

接着上面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

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值