在Windows函数中扩展行号

时间:2018-12-05 11:50:00

标签: sql sql-server

我正在尝试为购物者找到购物页面上的前10个品牌和文章类型。 我使用的逻辑如下:

我正在使用下面的逻辑同时为这两个表创建一个表并存储前10个

WITH CTE AS
(
  SELECT shoppingpage_url,
         brand,
         COUNT(*) AS sp_count
  FROM TABLE name
  GROUP BY 1,
           2
)
 SELECT *,
   ROW_NUMBER() OVER (PARTITION BY shoppingpage_url ORDER BY sp_count DESC) 
AS Top_10_flag
FROM cte

我对文章类型也做同样的事情,并且将它们都加入了。

SELECT a.shoppingpage_url,
      a.top_10_flag,
   brand,
   article_type

FROM dev.top10_Brand a
LEFT JOIN dev.top10_Articletype b
     ON a.shoppingpage_url = b.shoppingpage_url
    AND a.Top_10_flag = b.Top_10_flag

我面临的问题是某些页面上的页面只有一个品牌,却有多种文章类型。
我缺少品牌计数Top_10_flag不等于或小于文章类型'Top_10_flag的页面的文章类型。 我该如何预防?

sample data
-- brand data table
shoppingpage_url, brand,sp_count,Top_10_flag
url1,brandd,5,1

url2,branda,17,1
url2,brandb,8,2
url2,brandc,4,3

url3,brande,5,1

-- article type table

shoppingpage_url, article_type,sp_count,Top_10_flag
url1,articletype1,5,1
url1,articletype2,5,1
url1,articletype3,5,1

url2,articletype12,17,1
url2,articletype3,8,2

url3,articletype23,5,1
url3,articletype2,5,1

-----
the result I am getting

shoppingpage_url,Top_10_flag, brand, article_type
url1,1,brandd,articletype1

url2,1,branda,articletype12
url2,2,brandb,articletype3
url2,3,brandc,

url3,1,brande,1articletype23
---------------------------
what i want


url1,1,brandd,articletype1
url1,2,,articletype2
url1,3,,articletype3


url2,1,branda,articletype12
url2,2,brandb,articletype3
url2,3,brandc,

url3,1,brande,1articletype23
url3,2,,1articletype2

1 个答案:

答案 0 :(得分:0)

您要寻找full join吗?

SELECT COALESCE(b.shoppingpage_url, a.shoppingpage_url) as shoppingpage_url,
       COALESCE(b.top_10_flag, a.top_10_flag) as top_10_flag,
       b.brand, a.article_type
FROM dev.top10_Brand b FULL JOIN
     dev.top10_Articletype a
     ON a.shoppingpage_url = b.shoppingpage_url AND
        a.Top_10_flag = b.Top_10_flag