简化:
table1表中有数据格式如下:frompage (无重复值)
-----------------------------
www.baidu.com
bbs.sports.tom.com
bbs.5460.net table2中有数据如下:
sessionid (存在重复)
-----------------------------
shi3si3
d7hhju9
dhghi90
下面的游标实现字符串拼接:
elect sessionid from table2 where frompage like ‘www.baidu.com’
union all
select sessionid from table2 where frompage like ‘bbs.sports.tom.com‘
union all
select sessionid from table2 where frompage like ‘bbs.5460.net’
-----------------------------------------
基本的语句如下:declare @cur_col varchar(30) declare @sql varchar(8000)
set @sql=''
declare cur_col cursor forselect distinct frompage from table1 --将table1中的frompage独个赋cur_col
order by frompage
open cur_colfetch next from cur_col into @cur_col while @@fetch_status = 0 begin
set @sql=@sql+' select sessionid from table2 where frompage like ' + @cur_col + ' union all ' --这里怎么实现’bbs.sports.tom.com‘而不是bbs.sports.tom.com而已??fetch next from cur_col into @cur_col endset @sql=substring(@sql, 1, case when len(@sql)-10 < 0 then 0 else len(@sql)-10 end)print @sql
exec (@sql)
close cur_col
deallocate cur_col
go总个语句可以这样实现吗?请教?谢谢!
table1表中有数据格式如下:frompage (无重复值)
-----------------------------
www.baidu.com
bbs.sports.tom.com
bbs.5460.net table2中有数据如下:
sessionid (存在重复)
-----------------------------
shi3si3
d7hhju9
dhghi90
下面的游标实现字符串拼接:
elect sessionid from table2 where frompage like ‘www.baidu.com’
union all
select sessionid from table2 where frompage like ‘bbs.sports.tom.com‘
union all
select sessionid from table2 where frompage like ‘bbs.5460.net’
-----------------------------------------
基本的语句如下:declare @cur_col varchar(30) declare @sql varchar(8000)
set @sql=''
declare cur_col cursor forselect distinct frompage from table1 --将table1中的frompage独个赋cur_col
order by frompage
open cur_colfetch next from cur_col into @cur_col while @@fetch_status = 0 begin
set @sql=@sql+' select sessionid from table2 where frompage like ' + @cur_col + ' union all ' --这里怎么实现’bbs.sports.tom.com‘而不是bbs.sports.tom.com而已??fetch next from cur_col into @cur_col endset @sql=substring(@sql, 1, case when len(@sql)-10 < 0 then 0 else len(@sql)-10 end)print @sql
exec (@sql)
close cur_col
deallocate cur_col
go总个语句可以这样实现吗?请教?谢谢!
解决方案 »
- sql 2005 安装问题
- 数据库加密问题
- 存储过程的问题,怎样把字符串转成变量?
- 求SQL语句?
- 我的sqlserver数据库有15G的大小,200个用户同时访问数据库 一般需要多大内存比较合理
- 关于EXEC master..xp_cmdshell 'bcp "" queryout c:\miClinTemp.txt -c -Sgeonado -Usa -P'问题
- 关于sql server 2005远程连接问题
- sql server统计事物数量
- 求助:DTS包手动执行正常,但调度到作业,作业总是失败,请教原因!多谢了!!
- 各位兄弟在ORACLE中用什么东西写存储过程?
- 在ACCESS中创建视图,是否真得能提高读取数据的速度??
- 批处理改变字段的值
改為:
set @sql=@sql+' select '''+sessionid+''' from table2 where frompage like ' + @cur_col + ' union all '
表table1中有字段:
sessionid frompage
------------------------
shi3si3 www.baidu.com
d7hhju9 bbs.sports.tom.com
dhghi90 bbs.5460.net 我想得到如下数据格式:
frompage frompages sessionids
-----------------------------------------
www.baidu.com 55 44
bbs.sports.tom.com 54 45
bbs.5460.net 45 34
也就是对有相同frompage的记录进行汇总并生成frompages(按DESC排序),
而对排序后的frompage,对应的汇总出sessionids;我的做法是先将排序好frompage并得到frompages排序结果,
然后根据排序好的frompage汇总sessionids;
也就是由
select * into #tt from (select
frompage,(case when pageid is null then rtrim(count(*))else frompage end) as pageviewsfrom table1group by
frompage,pageid with rolluphaving
grouping(frompage)=0
)a
得到
frompage frompages
--------------------------
www.baidu.com 5696
bbs.sports.tom.com 3077
bbs.5460.net 1733然后用游标进行sessionids的汇总,最后想得到的结果就是frompage frompages sessionids
-----------------------------------------
www.baidu.com 5696 5444
bbs.sports.tom.com 3077 2322
bbs.5460.net 1733 223
------------------------
shi3si3 www.baidu.com
d7hhju9 bbs.sports.tom.com
dhghi90 bbs.5460.net
就凭这数据能得到下面这种数据?frompage frompages sessionids
-----------------------------------------
www.baidu.com 5696 5444
bbs.sports.tom.com 3077 2322
bbs.5460.net 1733 223看不懂了汇总数据从哪里来的
-----------------------------------------
44 www.baidu.com 5696
23 bbs.sports.tom.com 3077
22 bbs.5460.net 1733
sessionid pageid frompage
先对字段frompage进行一个汇总排序,只要frompage相同就相加(grouping(frompage)=0);
然后根据汇总排序后的结果再一次对session进行汇总,汇总的依据是由之前排序结果frompage;
sessionid pageid frompage
----------------------------------
dfre433ed 556 www.baidu.com
d45f45434 343 bbs.sports.tom.com
fg5h56y5y 878 bbs.5460.net 我的做法是先将排序好frompage并得到frompages排序结果,
然后根据排序好的frompage汇总sessionids;
也就是由
select * into #tt from (select
frompage,(case when pageid is null then rtrim(count(*))else frompage end) as pageviewsfrom table1group by
frompage,pageid with rolluphaving
grouping(frompage)=0
)a
得到
frompage frompages
--------------------------
www.baidu.com 5696
bbs.sports.tom.com 3077
bbs.5460.net 1733然后用游标进行sessionids的汇总,最后想得到的结果就是frompage frompages sessionids
-----------------------------------------
www.baidu.com 5696 5444
bbs.sports.tom.com 3077 2322
bbs.5460.net 1733 223
我就是想通过游标得到这个sessionids!!!
这个就是问题所在,谢谢
frompage,(case when pageid is null then rtrim(count(*))else frompage end) as pageviewsfrom table1group by
frompage,pageid with rolluphaving
grouping(frompage)=0
)a where pageviews not like '%.%'select * from #tt
order by cast(pageviews as int) descdrop table #tt我想在上面对frompage的汇总排序中一起得到sessionids的结果
但是好象行不通!