检索行的顺序有问题。我有一个名为documentfiles的表,我有三列文件名文件路径num我有一个查询,它检索相对于num的文件名和文件路径 这是我的查询
rs=s.executeQuery("SELECT filename from
documentfiles
where num in
(2167, 2156,
1677, 2149,
1946,1511
) "
);
我面临的问题是查询以按此顺序检索的num的升序检索行
1511 1677 1946 2149 2151 2156 2167 2526 2527 2612 2887 2890 2894 2895 3665 6254 6258 6920 7001 7013 7071 7072 7074 7100
但我想按此顺序
2167, 2156, 1677, 7074, 2149, 7100, 7072, 2890, 2527, 2526, 1946, 1511, 7071, 7013, 7001, 6920, 6258, 6254, 3665, 2895, 2894, 2887, 2612, 2151
我已经按升序存储了num值
1511 1677 1946 2149 2151 2156 2167 2526 2527 2612 2887 2890 2894 2895 3665 6254 6258 6920 7001 7013 7071 7072 7074 7100
不按此顺序
2167,2156,1677,2149,1946,1511
所以我如何实现这一目标是可能的,
任何帮助将不胜感激
提前致谢
答案 0 :(得分:2)
将查询调整为:
SELECT filename
from documentfiles
where num in (2167, 2156, 1677,2149,1946,1511)
order by case when num = 2167 then 1
when num = 2156 then 2
when num = 1677 then 3
when num = 2149 then 4
when num = 1946 then 5
when num = 1511 then 6
end
如果是生成的脚本,则不必关心放置的数量,因为构建查询会非常简单。如果没有生成,则必须手动放置。
我也可能建议你制作一个sp,并用带有2列(num,crt)的TVP(表值参数)调用它。所以你的查询会改变如下:
SELECT filename
from documentfiles df
join tvp
on df.num=tvp.num
order by crt
答案 1 :(得分:2)
您没有说明您的DBMS,因此这是ANSI SQL:
with numbers (num, sort_order) as (
values (2167,1), (2156,2), (1677,3), (2149,4), (1946,5), (1511, 6)
)
select filename
from documentfiles d
join numbers n on d.num = n.num
order by n.sort_order
答案 2 :(得分:0)
CREATE TABLE numbers
(
ID int identity(1,1) primary key,
number int
)
CREATE PROCEDURE insertnumbers
@number int
AS BEGIN
INSERT INTO numbers VALUES (@number);
END
现在你在开头
添加逗号,2167, 2156, 1677, 7074, 2149, 7100,
7072, 2890, 2527, 2526, 1946, 1511,
7071, 7013, 7001, 6920, 6258, 6254,
3665, 2895, 2894, 2887, 2612, 2151
然后使用记事本和SEARCH AND REPLACE
搜索:,
替换:; EXEC insertnumbers
然后您先删除;
,然后插入数字。然后INNER JOIN表文件名,表号为ON filename.filenumber = numbers.number和ORDER BY numbers.ID。