如何将我的tsql查询结果设置为与where语句的顺序相同

时间:2016-09-19 17:27:12

标签: sql tsql

我正在编写一个T-SQL查询,我试图让查询的结果与where语句中请求的顺序完全相同。下面是我想要实现的一个例子。 谢谢

Select LoanNumber
From Table
Where LoanNumber in ('123456789', '987654321', '741852963')

期望效果:在结果中,我希望这些贷款数量与输入的顺序相同。我得到的是有时它将结果按各种顺序排列。我已经尝试了order by子句,但它仍然没有产生预期的效果。

2 个答案:

答案 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;