2

我正在使用 SQL Server 数据库。比如说,我有一个返回 ID 数组的选择。我可以(使用 SQL)找出该数组中等于 N 的 ID 的顺序吗?

这就是我的意思。这是我的实际选择:

SELECT [id] FROM [dbo.test_db_002] t1
LEFT JOIN [dbo.test_db_003] t2 
ON t1.[id]=t2.[itmid] 
ORDER BY t2.[iid] ASC;

比如说,它将返回以下 ID 数组:

13, 7, 34, 5, 2, 14

并且,假设我需要知道该数组中 ID=5 的索引是什么(答案是 3,如果 13 是索引 0,则 7 = 索引 1,34 = 索引 2,5 = 变为索引 3。)

4

3 回答 3

2

尝试使用 ROW_NUMBER():

SELECT ROW_NUMBER() OVER (ORDER BY t2.[iid] ASC) -1 AS RowIndex
    ,[id] 
FROM [dbo.test_db_002] t1
LEFT JOIN [dbo.test_db_003] t2 
    ON t1.[id]=t2.[itmid] 
ORDER BY t2.[iid] ASC;

更多信息在这里http://msdn.microsoft.com/en-us/library/ms186734.aspx

于 2011-11-11T09:03:47.917 回答
1

试试这个:

SELECT x.RowNum - 1
FROM
(
    SELECT [id], ROW_NUMBER() OVER (ORDER BY t2.[iid]) as RowNum 
    FROM   [dbo.test_db_002] t1
           LEFT JOIN [dbo.test_db_003] t2 ON t1.[id]=t2.[itmid] 
) x
WHERE x.[id] = 5

请注意,这-1是因为ROW_NUMBER()从 1 而不是 0 开始,并且您特别提到了一个零索引数组。

于 2011-11-11T09:07:09.123 回答
1

试试这个......虽然我不确定你的表结构

Declare @Temp table
(
    id int,
    Name varchar(20)
)
Insert into @Temp 
    select 1, 'Bob'
union all
    select 2, 'Mark'
union all
    select 3, 'Shaun'
union all
    select 4, 'Ryan'
union all
    select 5, 'Steve'
union all
    select 6, 'Bryan'
union all
    select 7, 'Henry'

Declare @Temp2 table
(
    iid int,
    itmid int,
    Name varchar(20)
)
Insert into @Temp2
    select 1, 3, 'Thing'
union all
    select 2, 2, 'This'
union all
    select 3, 5, 'That'
union all
    select 4, 1, 'They'
union all
    select 5, 3, 'There'
union all
    select 6, 5, 'Though'
union all
    select 7, 6, 'Thought'

SELECT t1.[id], Row_Number() OVER (Order by t1.[id]) as RowNum
FROM @Temp t1
LEFT JOIN @Temp2 t2 ON t1.[id]=t2.[itmid] 
ORDER BY t1.[id] ASC;
于 2011-11-11T09:09:35.690 回答