首页 > 解决方案 > 在 2 个表之间结合 row_num 和 group by

问题描述

我有 2 个表,我正在尝试将 row_number 应用于每个组,表 2 中的 row_number 会在表 1 停止的地方出现。

表 1(按预期工作):

输出

SELECT DISTINCT Product, Item, ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Product, Item)
FROM Table1 (NOLOCK)

表 2:所需输出:

在此处输入图像描述

当前代码:

SELECT DISTINCT Product, Item, ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Product, Item)+(SELECT COUNT(*) FROM Table1)
FROM Table2 (NOLOCK)

电流输出

标签: sqlsql-servertsql

解决方案


一种可能的方法是以下声明:

表:

CREATE TABLE Table1 (Product varchar(1), Item int)
INSERT INTO Table1 (Product, Item)
VALUES ('A', 1), ('A', 2), ('B', 1), ('B', 2), ('B', 3)

CREATE TABLE Table2 (Product varchar(1), Item int)
INSERT INTO Table2 (Product, Item)
VALUES ('A', 1), ('A', 2), ('B', 1)

陈述:

SELECT 
   Product, 
   Item, 
   ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Item) AS Rn
FROM Table1

SELECT 
  t2.Product, 
  t2.Item, 
  ROW_NUMBER() OVER (PARTITION BY t2.Product ORDER BY t2.Item) + t1.[Count] AS Rn
FROM Table2 t2
LEFT JOIN (
   SELECT Product, COUNT(*) AS [Count]
   FROM Table1 
   GROUP BY Product
) t1 ON t2.Product = t1.Product

结果:

Product Item  Rn
A       1     1
A       2     2
B       1     1
B       2     2
B       3     3

Product Item Rn
A       1    3
A       2    4
B       1    4

推荐阅读