我已经尝试了一段时间,按照以下顺序使用ID(int)值从数据库返回数据。
3,6,1,9,2,5。
无论如何这可以做到吗?
编辑:好的,我在帖子中写了一些东西。上面的ID只是一个例子。我正在尝试动态地执行此操作,这是基于另一个表中有多少记录链接到我想要提取的记录,例如我主持3个分支机构,每个分支机构都有一组商店,我如何确定哪个分支最多?
我希望这会有所帮助。
答案 0 :(得分:4)
是的,就像这样:
select ID from tablename
order by
CASE WHEN ID = 3 THEN 1
WHEN ID = 6 THEN 2
WHEN ID = 1 THEN 3
WHEN ID = 9 THEN 4
WHEN ID = 2 THEN 5
WHEN ID = 5 THEN 6
ELSE 7 END, ID ASC
这会将3,6,1,9,2,5和其他数字按升序排列。
答案 1 :(得分:2)
select cols from table where
order by
case ID when 3 then 0
when 6 then 1
when 1 then 2
when 9 then 3
...
end
你明白了......
答案 2 :(得分:1)
创建一个排序表。
CREATE TABLE SortPriority( SourceID int NULL, 优先级为NULL)
使用id填充它以及它们应该显示的顺序。加入表格。并在排序中使用SortPriority.Priority。
您可以更轻松地以这种方式更改排序。您只需要修改数据。您也可以稍后编写脚本来填充表,以便在更改排序时处理可预测的需求。
答案 3 :(得分:0)
像这样的分裂函数:
CREATE FUNCTION fnSplit(@str varchar(max), @dlm char(1))
RETURNS @result TABLE (id int, value varchar(50))
AS BEGIN
DECLARE
@id int, @value varchar(50),
@lastpos int, @pos int, @len int;
SET @id = 0;
SET @len = LEN(@str);
SET @lastpos = 1;
SET @pos = CHARINDEX(@dlm, @str + @dlm);
IF @pos <> 0
WHILE 1 = 1 BEGIN
SET @value = SUBSTRING(@str, @lastpos, @pos - @lastpos);
IF @value <> '' BEGIN
SET @id = @id + 1;
INSERT INTO @result VALUES (@id, @value);
END;
IF @pos > @len BREAK;
SET @lastpos = @pos + 1;
SET @pos = CHARINDEX(@dlm, @str + @dlm, @lastpos);
END;
RETURN;
END
将返回一个行集,不仅包含值,还包含列表中的索引。然后您可以这样使用该功能:
SELECT
…
FROM atable t
LEFT JOIN dbo.Split('3,6,1,9,2,5', ',') s ON t.Value = s.Value
ORDER BY
CASE WHEN s.id IS NULL THEN 2147483647 ELSE s.id END