将行号添加到SQL查询的结果集中

时间:2013-11-27 02:09:32

标签: sql sql-server sql-server-2005

我有一个简单的select语句。我想添加一个临时列,它将对结果集中的行进行编号。我试过了 -

declare @num int
set @num = 0;
select t.A, t.B, t.C, (@count + 1) as number
from tableZ as t

它将1分配给所有行。我试过@count = @count + 1但它没有用。 我该如何以简单的方式做这件事?

感谢。

3 个答案:

答案 0 :(得分:52)

SELECT
    t.A,
    t.B,
    t.C,
    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS number
FROM tableZ AS t

参见工作示例at SQLFiddle

当然,您可能希望定义行编号顺序 - 如果是这样,只需交换OVER (ORDER BY (SELECT 1)),例如OVER (ORDER BY t.C),就像在普通的ORDER BY子句中一样。

答案 1 :(得分:46)

典型的模式如下,但您需要实际定义应该如何应用排序(因为根据定义,表是一个无序的行包):

SELECT t.A, t.B, t.C, number = ROW_NUMBER() OVER (ORDER BY t.A)
  FROM dbo.tableZ AS t
  ORDER BY t.A;

不确定问题中的变量应该代表什么(它们不匹配)。

答案 2 :(得分:0)

因此,在MySQL 8.0之前,没有ROW_NUMBER()函数。重写答案以支持旧版本的MySQL:

const initialState = {
  byId: {}
};

function addReducer(state = initialState, action) {
  switch (action.type) {
    case "RECEIVE_DATA":
      return {
        ...state,
        byId: {
          ...state.byId,
          [action.payload.id]: (
              state.byId[action.payload.id] ? [
              ...state.byId[action.payload.id],
              action.payload.data
            ] : [action.payload.data])
        }
      };
    default:
      return state;
  }
}

export default addReducer;