0

Id と Name を持つ Order テーブルがあります

1  Fruits
33 Liquor
48 Tennis bats
58 Vegetables 
95 Poker cards

SELECT * FROM Order ORDER BY... Id = (48, 95, 33, 1, 58)

そして結果は

48 Tennis bats
95 Poker cards
33 Liquor
1  Fruits
58 Vegetables 

Q:必要な列の値でこのレコードを並べ替えるにはどうすればよいですか?

これから一般的な関数(おそらくストアドプロシージャ)を作成したいので、CASEメソッドを使用できません:

CASE WHEN Id=48 THEN 0 ELSE 1  END, -- Not this way!!!!
4

1 に答える 1

1
create table [Order] (
  ID int, Name varchar(32)
)

insert into [Order]
  values (1, 'Fruits'),
         (33, 'Liquor'),
         (48, 'Tennis bats'),
         (58, 'Vegetables'),
         (95, 'Poker cards')
GO

create function dbo.Orderer(@id int, @orderString varchar(1024))
returns int
as
begin
  set @orderString = replace(',' + @orderString + ',', ' ', '');

  declare @pos int, 
          @str varchar(1024), 
          @itemOrder int;

  set @pos = charindex(',' + cast(@id as varchar(16)) + ',', @orderString);
  if @pos != 0
  begin
    set @orderString = substring(@orderString, 1, @pos + 1);
    set @pos = charindex(',', @orderString);
    set @itemOrder = 0;

    while @pos != 0
    begin
      set @itemOrder += 1;

      set @pos = charindex(',', @orderString, @pos + 1);
    end

    return @itemOrder
  end

  return null
end
GO

select * from [Order]
order by dbo.Orderer(ID, '48, 95, 33, 1, 58')
于 2013-02-19T19:39:43.067 に答える