为每行分配值

时间:2011-03-17 06:22:57

标签: sql sql-server tsql

如何为每个表行分配t-sql表达式? 例如:

Foreach user in Users
{
user.Place = SELECT COUNT(*) AS [value]
FROM [Users] AS [t0]
WHERE (COALESCE([t0].[Votes],@p0)) > @p1;
}

其中Users是表格。这是伪代码,但我想在t-sql存储过程中执行此操作。

3 个答案:

答案 0 :(得分:1)

因此,您希望所有用户记录以及每条记录都有一个计数..

您可以使用子查询 - 但是@ p0和@ p1是什么?检查一下

SELECT u.*, Place = (
    SELECT COUNT(*) AS [value]
    FROM [Users] AS [t0]
    WHERE COALESCE([t0].[Votes],0) > u.Votes)
FROM Users u

从SQL Server 2005+开始,您可以使用窗口函数

SELECT u.*, Place = Rank() over (order by u.Votes)
FROM Users u

答案 1 :(得分:0)

你在寻找像

这样的东西吗?

ROW_NUMBER (Transact-SQL)RANK (Transact-SQL)DENSE_RANK (Transact-SQL)

另请查看this example

答案 2 :(得分:0)

这就是你的意思:

UPDATE Users
SET Place = (
  SELECT COUNT(*)
  FROM Users
  WHERE COALESCE(Votes, @p0) > @p1
)