-- ============================================= -- Author: <tanke> -- Create date: <2007-4-17> -- Description: <统计访问量和综合浏览量> -- exec sp_sys_Master '<?xml version="1.0" encoding="unicode" ?><report action="3" gid="-774702857" etime="2007-4-15" stime="2007-4-10" />' -- ============================================= ALTERPROCEDURE[dbo].[SP_GetData_BrowseVisit] ( @hDocint ) as Begin -- 参数定义 declare@stimedatetime,@etimedatetime,@typenvarchar(30),@gidint declare@tmptabtable(cid int,timeid int,the_date datetime,asc_code int) -- 写入临时表视图 INSERTINTO@tmptab(cid,timeid,the_date,asc_code) SELECT c.id,b.id, b.the_date,c.asc_code FROM dbo.Fact_PageAccess AS a,dbo.Dim_Date AS b,dbo.Dim_Company AS c WHERE a.timeid = b.id AND a.cid = c.id /**//* 生成返回 */ SELECT@stime=stime,@etime=etime,@gid=gid from openxml(@hDoc,'//report',1) WITH (stime datetime,etime datetime,gid int) -- 查询 SELECT1AS tag,nullAS parent,'accountsum/browsesum'as[report!1!type],@gidas[report!1!gid],convert(varchar(30),@stime,111) as[report!1!stime],convert(varchar(30),@etime,111) as[report!1!etime],nullas[detail!2!date],nullas[detail!2!count],nullas[detail!2!bcount] UNIONALL select2,1,null,null,null,null,the_date, COUNT(*) AScount, (SELECTCOUNT(*) AS bcount FROM dbo.Fact_SiteAccess AS a WHERE (a.timeid = t.timeid AND a.cid=t.cid)) AS bcount FROM@tmptab t WHERE asc_code=@gidAND (DATEDIFF(d, @etime, the_date) <=0) AND (DATEDIFF(d, @stime, the_date) >=0) GROUPBY the_date,t.timeid,t.cid FOR XML EXPLICIT End /**//* -- 返回结果 <xmldata> <report type="accountsum/browsesum" stime="2006-12-01" etime="2006-12-04"> <detail date="2006-12-01" count="" bcount=""/> <detail date="2006-12-01" count="" bcount=""/> <detail date="2006-12-01" count="" bcount=""/> </report> </xmldata> <xmldata> <action id="2" /> <query gid="-774702857" stime="2007-04-11" etime="2007-04-11"/> </xmldata> */
经过一番改进后,收获还是挺多的.
CREATEPROCEDURE[dbo].[SP_GetData_BrowseVisit] ( @hDocint ) as Begin -- 参数定义 DECLARE@stimenvarchar(10),@etimenvarchar(10),@typenvarchar(30),@gidbigint,@sidint,@eidint,@cidint /**//* 生成返回 */ SELECT@stime=stime,@etime=etime,@gid=gid from openxml(@hDoc,'//query',1) WITH (stime nvarchar(10),etime nvarchar(10),gid bigint) -- 查询 SELECT@cid=id FROM dbo.Dim_Company WHERE asc_code=@gid SELECT@sid=id FROM dbo.Dim_Date WHERE the_date=@stime SELECT@eid=id FROM dbo.Dim_Date WHERE the_date=@etime SELECT 1AS tag, nullAS parent, 'accountsum/browsesum'AS[report!1!type], @stimeAS[report!1!stime], @etimeAS[report!1!etime], nullAS[detail!2!date], nullAS[detail!2!count], nullAS[detail!2!bcount] UNIONALL SELECT 2, 1, null, null, null, b.the_date, COUNT(*) count, COUNT(DISTINCT a.sid) bcount FROM dbo.Fact_PageAccess a INNERJOIN dbo.Dim_Date b ON b.id=a.timeid WHERE b.id>=@sidAND b.id<=@eidAND a.cid=@cid GROUPBY b.the_date FOR XML EXPLICIT,root('xmldata'),type End