我正在编写一个T-SQL查询,我试图让查询的结果与where语句中请求的顺序完全相同。下面是我想要实现的一个例子。 谢谢
Select LoanNumber
From Table
Where LoanNumber in ('123456789', '987654321', '741852963')
期望效果:在结果中,我希望这些贷款数量与输入的顺序相同。我得到的是有时它将结果按各种顺序排列。我已经尝试了order by子句,但它仍然没有产生预期的效果。
答案 0 :(得分:1)
由于order by
子句是确保结果集顺序的唯一方法,因此您可以构建与where
子句匹配的select *
from LoanTable
where LoanNumber in ('123456789', '987654321', '741852963')
order by case LoanNumber
when '123456789' then 1
when '987654321' then 2
when '741852963' then 3
...
else 9999 end
子句,如下所示:
where
如果您动态构建order by
,那么这不会太糟糕,因为{{1}}的逻辑在每一步都会匹配。
答案 1 :(得分:0)
在WHERE子句中没有“ORDER BY”出现顺序的原生SQL方法。
你可以做一些像SlimsGhost演示的东西,或者你可以使用像这样的临时表:
-- your table
DECLARE @Table TABLE(LoanNumber bigint);
INSERT @Table VALUES ('987654321'),('741852963'),('123456789'),('1234'),('123456789');
-- a "filter table"
DECLARE @tmp TABLE (ordinal tinyint identity, LoanNumber bigint);
INSERT @tmp (LoanNumber) VALUES ('123456789'),('987654321'),('741852963');
-- Using the filter table
SELECT LoanNumber
FROM
(
SELECT ordinal, t.LoanNumber
FROM @Table t
JOIN @tmp x ON t.LoanNumber = x.LoanNumber
GROUP BY ordinal, t.LoanNumber
) ln
ORDER BY ordinal;