2

SQLServerデータベースを使用しています。たとえば、IDの配列を返す選択があります。その配列でNに等しいIDの順序を(SQLで)見つけることができますか?

これが私の言いたいことです。これが私の実際の選択です:

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のインデックスを知る必要があるとします(13がインデックス0の場合、答えは3、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

これは、0 ではなく 1 から始まることに注意してください。具体的には、インデックスがゼロの配列について言及しまし-1た。ROW_NUMBER()

于 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 に答える