在行sql server中添加一个具有相同外键的外键

时间:2015-01-28 09:46:20

标签: sql-server

我在sql server上遇到了问题。

如何一次从外键中获取运行号码从表中选择数据?

示例: 我有一个表,如

 -----------------
| id | pid | desc |
 -----------------
|  1 |  1  |   a  |
|  2 |  1  |   b  |
|  3 |  1  |   c  |
|  4 |  2  |   d  |
|  5 |  2  |   e  |
|  6 |  2  |   f  |
|  7 |  2  |   g  |
|  8 |  3  |   h  |
|  9 |  3  |   i  |
| 10 |  1  |   j  |
| 11 |  1  |   k  |
 -----------------

我想得到如下结果

 ------------------------
| id | pid | desc | rec  |
 ------------------------
|  1 |  1  |   a  |   1  |
|  2 |  1  |   b  |   2  |
|  3 |  1  |   c  |   3  |
|  4 |  2  |   d  |   1  |
|  5 |  2  |   e  |   2  |
|  6 |  2  |   f  |   3  |
|  7 |  2  |   g  |   4  | 
|  8 |  3  |   h  |   1  |
|  9 |  3  |   i  |   2  |
| 10 |  1  |   j  |   4  |
| 11 |  1  |   K  |   5  |
 ------------------------

在上表中,外键(' pid')列在不同的行号中具有值1到3。 我试图从每个'pid'中获取运行编号。字段名称。 我找不到任何办法,

我能这样做吗?有人能帮我吗?我仍是sql server的新手

2 个答案:

答案 0 :(得分:0)

您可以在SQL Server 2005+中使用排名功能来实现这一目标,

所以这是你的查询

Select Row_Number() over (partition by pid order by id) as rec , * from Table

答案 1 :(得分:0)

试试这个

SELECT
id,
pid,
[desc],
Row_Number() OVER (PARTITION BY pid ORDER BY id) AS rec
FROM <yourtable>
ORDER BY id