2014-09-24 43 views
0

我正在對我的原始網站分析數據進行一些分析,並嘗試在我的網站上找到導致購買的共同到達路徑。我已經遷移我的所有數據在一個整潔的工作臺/以下腳本:Pathing Analysis網絡數據

  1. [ORDER_ID]:非唯一VARCHAR(A1000,A1001等)
  2. [VISIT_IN_PATH]:數字(1,2,3,4 ,5等)
  3. [VISIT_REMAINING]:數字(1,2,3,4,5等)
  4. [CHANNEL]:VARCHAR(DIRECT /電子郵件/ DISPLAY /付費搜索/ FREE SEARCH)

我希望得到的是路徑的計數,例如只使用ORDER_ID ABC123我可能會得到以下:

COUNT/VISIT_IN_PATH_1/VISIT_IN_PATH_2/VISIT_IN_PATH_3/VISIT_IN_PATH_4/VISIT_IN_PATH_5 1 /免費搜索/免費搜索/ DIRECT /免費搜索/ DIRECT

我非常新的SQL和我首先想到的是某種樞軸,但我接近這個方法的每一個方法,我都會一直靠在牆上,每一個可能性都必須定義。

當然有更好的方法嗎?

CREATE TABLE [dbo].[DummyPaths](
            [ORDER_ID] [varchar](64) NULL, 
            [VISIT_IN_PATH] [bigint] NULL, 
            [VISIT_REMAINING] [bigint] NULL, 
            [MARKETING_CHANNEL] [varchar](256) NULL 
           ) 
GO 

INSERT INTO DummyPaths (ORDER_ID,VISIT_IN_PATH,VISIT_REMAINING,MARKETING_CHANNEL) 
VALUES  ('ABC123','1','5','FREE SEARCH'), 
      ('ABC123','2','4','FREE SEARCH'), 
      ('ABC123','3','3','DIRECT'), 
      ('ABC123','4','2','FREE SEARCH'), 
      ('ABC123','5','1','DIRECT'), 
      ('ABC124','1','5','OTHER REFERRAL'), 
      ('ABC124','2','4','OTHER REFERRAL'), 
      ('ABC124','3','3','OTHER REFERRAL'), 
      ('ABC124','4','2','OTHER REFERRAL'), 
      ('ABC124','5','1','OTHER REFERRAL'), 
      ('ABC125','1','5','DIRECT'), 
      ('ABC125','2','4','AFFILIATE'), 
      ('ABC125','3','3','AFFILIATE'), 
      ('ABC125','4','2','AFFILIATE'), 
      ('ABC125','5','1','AFFILIATE'), 
      ('ABC126','1','5','EMAIL'), 
      ('ABC126','2','4','EMAIL'), 
      ('ABC126','3','3','DIRECT'), 
      ('ABC126','4','2','DIRECT'), 
      ('ABC126','5','1','DIRECT'), 
      ('ABC127','1','5','FREE SEARCH'), 
      ('ABC127','2','4','DIRECT'), 
      ('ABC127','3','3','DIRECT'), 
      ('ABC127','4','2','FREE SEARCH'), 
      ('ABC127','5','1','DIRECT'), 
      ('ABC128','1','5','DIRECT'), 
      ('ABC128','2','4','EMAIL'), 
      ('ABC128','3','3','EMAIL'), 
      ('ABC128','4','2','EMAIL'), 
      ('ABC128','5','1','DIRECT'), 
      ('ABC129','1','5','FREE SEARCH'), 
      ('ABC129','2','4','FREE SEARCH'), 
      ('ABC129','3','3','FREE SEARCH'), 
      ('ABC129','4','2','FREE SEARCH'), 
      ('ABC129','5','1','DIRECT') 

我會非常感謝任何幫助。

感謝

回答

0

我一直在玩這個,發現了以下工作:

with  dataset 
as 
(
select ORDER_ID 
     ,[1] as 'VISIT1' 
     ,[2] as 'VISIT2' 
     ,[3] as 'VISIT3' 
     ,[4] as 'VISIT4' 
     ,[5] as 'VISIT5'     
from 
(
    select order_id, visit_in_path, MARKETING_CHANNEL 
    from dummypaths 
) x 
pivot 
(
    min(MARKETING_CHANNEL) 
    for visit_in_path in ([1], [2], [3], [4], [5]) 
) p 
) 


select  x.VISIT1 
      ,x.VISIT2 
      ,x.VISIT3 
      ,x.VISIT4 
      ,x.VISIT5 
      ,MAX(dupes) as 'count' 
from 
(
select  
      VISIT1 
      ,VISIT2 
      ,VISIT3 
      ,VISIT4 
      ,VISIT5 
      ,ROW_NUMBER() over 
          (partition by VISIT1 
              ,VISIT2 
              ,VISIT3 
              ,VISIT4 
              ,VISIT5 
          order by  VISIT1 asc 
          ) as 'dupes' 
from dataset 
) x 
group by x.VISIT1 
      ,x.VISIT2 
      ,x.VISIT3 
      ,x.VISIT4 
      ,x.VISIT5