我有一个简单的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但它没有用。 我该如何以简单的方式做这件事?
感谢。
答案 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;