gpt4 book ai didi

sql - 根据 SQL 函数中的顺序对列进行排序

转载 作者:行者123 更新时间:2023-12-02 22:04:15 25 4
gpt4 key购买 nike

我有一个类似下面的查询,我希望记录以与“in”函数内指定的 id 相同的顺序返回。

SELECT * FROM table 1 where id in(12,6,4,3,13)

我可以单独使用 sql 来执行此操作还是需要编写自己的排序函数。

最佳答案

用您的 ID 创建一个表,然后连接到表,按另一个标识列排序。

假设您有 10k 个 ID,它们将不会被手动输入,因此可能能够以不同的方式构建排序/连接表。还应该比使用大型 in

更有效
create table #tempID(idSort int identity(1,1), id int)
insert into #tempID(id)
select 12 union all
select 6 union all
select 4 union all
select 3 union all
select 13

select * from table t1
inner join #tempID t2
on t1.id = t2.id
order by t2.idSort

要动态创建排序表,您需要此函数(或类似函数):

create FUNCTION [dbo].[comma_sep_var_intSort] (@list nvarchar(MAX))
RETURNS @tbl TABLE (idSort int identity(1,1), id int NOT NULL
) AS
BEGIN
DECLARE @pos int,
@nextpos int,
@valuelen int

SELECT @pos = 0, @nextpos = 1

WHILE @nextpos > 0
BEGIN
SELECT @nextpos = charindex(',', @list, @pos + 1)
SELECT @valuelen = CASE WHEN @nextpos > 0
THEN @nextpos
ELSE len(@list) + 1
END - @pos - 1
INSERT @tbl (id)
VALUES (cast(substring(@list, @pos + 1, @valuelen) as int))
SELECT @pos = @nextpos
END
RETURN
END

然后像这样加入:

declare @idList varchar(max)

set @idLIst = '12,6,4,3,13'

select * from table t1
inner join [dbo].[comma_sep_var_int](@idList) t2
on t1.id = t2.id
order by t2.idSort

关于sql - 根据 SQL 函数中的顺序对列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16386633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com