2

私のテーブルデータは次のようになります。

SessionRefere  

http://www.google.com/url?sa=t&rct=j&q=aaa bbb&source=web&cd=1&cad=rja&sqi=2&ved=0CB4QFjAA&url=http://www.abc.com/&ei=QFR0UM-JKIrQrQfsuoG4CQ&usg=AFQjCNExYcKkcvobBbktLGNksptf1giQRw
-------------------------------------------------
http://www.google.com/reader/view/?hl=es&tab=Xq&at=RTknd_lBUUnvNqan2641EA
----------------------------------------------------
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&ved=0CEgQFjAE&url=http://www.abc.com/ppp.aspx&ei=dmd0UOO9AYnY4QS1sYGwBw&usg=AFQjCNGIFcJUUSVpl_ZiZoSWDP2LkIagtw

サンプルデータのみです。このような場合が多くあります。だから私はカウントする前に元のURL部分が欲しいです。

このクエリを使用してデータを取得します。

DECLARE @temp table(RefPage nvarchar(200))
insert into @temp
SELECT
   CASE CHARINDEX( '?', SessionReferer)
       WHEN 0 THEN SessionReferer
       ELSE LEFT(SessionReferer, CHARINDEX( '?', SessionReferer) - 1) END AS RefPage 
FROM Tracker WHERE [start] between '1-1-2010' and '1-1-2015' and  SessionReferer<> ''

 select distinct RefPage, count(*) as [VisitTime] from @temp
  group by RefPage
order by [VisitTime] desc

そして私の結果は次のとおりです。

SessionRefere                           VisitTime
http://www.google.com/url                 2
http://www.google.com/reader/view/        1 

しかし、私は結果が欲しいです:

SessionRefere                           VisitTime
http://www.google.com                      3

欲望の結果を得ることが可能ですか、それとも私は間違っていますか?ありがとう。

4

3 に答える 3

3

これを試して

Declare @T Table(URL Varchar(MAX))
Insert Into @T Values('http://www.google.com/url?sa=t&rct=j&q=aaa bbb&source=web&cd=1&cad=rja&sqi=2&ved=0CB4QFjAA&url=http://www.abc.com/&ei=QFR0UM-JKIrQrQfsuoG4CQ&usg=AFQjCNExYcKkcvobBbktLGNksptf1giQRw')
Insert Into @T Values('http://www.google.com/reader/view/?hl=es&tab=Xq&at=RTknd_lBUUnvNqan2641EA')
Insert Into @T Values('http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&ved=0CEgQFjAE&url=http://www.abc.com/ppp.aspx&ei=dmd0UOO9AYnY4QS1sYGwBw&usg=AFQjCNGIFcJUUSVpl_ZiZoSWDP2LkIagtw')
Insert Into @T Values('http://www.yahoo.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&ved=0CEgQFjAE&url=http://www.abc.com/ppp.aspx&ei=dmd0UOO9AYnY4QS1sYGwBw&usg=AFQjCNGIFcJUUSVpl_ZiZoSWDP2LkIagtw')

;WITH CTE AS
(
    SELECT 
        URL
        ,SessionRefere = SUBSTRING(URL,0,CHARINDEX('://', URL)+3) + SUBSTRING(URL,CHARINDEX('://', URL)+3,CHARINDEX('/', SUBSTRING(URL,CHARINDEX('://', URL)+3,LEN(URL)))-1)
    FROM @T
)

SELECT SessionRefere,[VisitTime] = COUNT(SessionRefere)
FROM CTE
GROUP BY SessionRefere

出力

SessionRefere   VisitTime
http://www.google.com   3
http://www.yahoo.com    1
于 2012-10-10T09:02:05.513 に答える
2

で分割してみてくださいCHARINDEX('/',SessionReferrer,9)

 select 
   case when CHARINDEX('/',SessionReferrer,9) = 0 
     then SessionReferrer
     else left(SessionReferrer, CHARINDEX('/',SessionReferrer,9)-1)
   end,
   count(*)
 from Tracker      
 group by
   case when CHARINDEX('/',SessionReferrer,9) = 0 
     then SessionReferrer
     else left(SessionReferrer, CHARINDEX('/',SessionReferrer,9)-1)
   end

(私はあなたのすべてのリファラーがhttp://またはhttps://で始まると怠惰に仮定しています)

于 2012-10-10T08:42:53.873 に答える
1

ここで私はやっています:

文字列@testの場合:
URLから「//」と「/」の間で文字列を分割し、指定されたURLに従ってhttp:またはhttpsを連結します

Declare  @test nvarchar(100)
Declare @http nvarchar(8)
set @test = 'http://www.google.com/url?sa=t&rct=j&q=aaa bbb&source=web&cd=1&cad=rja&sqi=2&ved=0CB4QFjAA&url=http://www.abc.com/&ei=QFR0UM-JKIrQrQfsuoG4CQ&usg=AFQjCNExYcKkcvobBbktLGNksptf1giQRw'
declare @length int
declare @start int
declare @subString nvarchar(100)
set @start =( select CharIndex('//', @test))
set @http = SUBSTRING(@test, 0 , @start)
set @length = Len(@test)
set @subString = SUBSTRING ( @test ,@start+2 , @length )
set @start =( select CharIndex('/', @subString))
set @subString = SUBSTRING ( @subString ,0 , @start )
set @subString = @http+'//'+ @subString
于 2012-10-10T09:15:09.533 に答える