代码之家  ›  专栏  ›  技术社区  ›  Hansen

在sqlserver行添加一个具有相同外键的

  •  0
  • Hansen  · 技术社区  · 10 年前

    我在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”字段名中获取运行编号。 我没有找到任何方法来做到这一点,

    我能做到吗?有人能帮我吗?我对sqlserver还是新手

    2 回复  |  直到 10 年前
        1
  •  0
  •   Raj    10 年前

    试试这个

    SELECT
    id,
    pid,
    [desc],
    Row_Number() OVER (PARTITION BY pid ORDER BY id) AS rec
    FROM <yourtable>
    ORDER BY id 
    
        2
  •  0
  •   Reza    10 年前

    您可以使用SQL Server 2005+中的Ranking函数来实现这一点,

    这是你的疑问

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