通过连接其他表并重置每个组,选择@ROW_NUMBER

时间:2017-08-05 22:26:48

标签: sql sql-server

我的问题标题可能并不完全是指我的意思,但我不知道该怎么写tbh。

让我们进入问题。我想拥有的是以下

表1

+---------+---------+
| Column1 | Column2 |
+---------+---------+
| Code1   | LCode1  |
| Code2   | LCode2  |
| Code3   | LCode3  |
+---------+---------+

表2

+---------+---------+
| Column3 | Column4 |
+---------+---------+
| LCode1  | string1 |
| LCode1  | string2 |
| LCode1  | string3 |
| LCode2  | String1 |
| LCode2  | String2 |
| LCode2  | String3 |
| LCode2  | String4 |
| LCode3  | String1 |
| LCode3  | String2 |
+---------+---------+

选择表应该是那样......

+-------+---------+-----------+---------+
| Index | Column1 | Column2-3 | Column4 |
+-------+---------+-----------+---------+
|     0 | Code1   | LCode1    | string1 |
|     1 | Code1   | LCode1    | string2 |
|     2 | Code1   | LCode1    | string3 |
|     0 | Code2   | LCode2    | string1 |
|     1 | Code2   | LCode2    | string2 |
|     2 | Code2   | LCode2    | string3 |
|     3 | Code2   | LCode2    | string4 |
|     0 | Code3   | LCode3    | string1 |
|     1 | Code3   | LCode3    | string1 |
+-------+---------+-----------+---------+

我曾尝试在两个表之间使用ROW_NUMBER和连接语句,但遗憾的是我没有运气。只有当我对指定的Column2-3值使用WHERE语句而不是全部它们时才有可能。 例如

SELECT ROW_NUMBER() AS Index, * FROM Table1 T1 JOIN Table2 T2 ON T1.Column2 = T2.Column3 Order By Index

提前致谢。

2 个答案:

答案 0 :(得分:0)

您似乎想要:

SELECT ROW_NUMBER() OVER (PARTITION BY T1.column1 ORDER BY T2.column4) - 1 AS seqnum,
       T1.*, T2.*
FROM Table1 T1 JOIN
     Table2 T2
     ON T1.Column2 = T2.Column3
ORDER BY seqnum;

index是列的错误名称,因为它是SQL关键字。

答案 1 :(得分:0)

尝试在查询中使用PARTITION BY

我希望能帮助你。