SELECT Code, Value FROM dbo.Sample

输出:
 Code     Value
 Alpha    Pig
 Beta     Horse
 Charlie  Dog
 Delta    Cat
 Echo     Fish

我想通过指定一个代码列表来添加一个序列列,并根据 IN 子句中指定的顺序对列表进行排序。
SELECT Code, Value FROM dbo.Sample
WHERE Code in ('Beta', 'Echo', 'Alpha')

如果更容易的话,我可以在顶部声明一个变量来指定代码。

关键是我想根据我指定的顺序添加行号。

输出:
 Row   Code    Value
  1    Beta    Horse
  2    Echo    Fish
  3    Alpha   Pig

编辑:我意识到我的代码都是固定长度的,这对如何完成有很大的不同。我将下面的答案标记为正确,但我的解决方案是使用逗号分隔的值字符串:
DECLARE @CodeList TABLE (Seq int, Code nchar(3))
DECLARE @CodeSequence varchar(255)
DECLARE @ThisCode char(3)
DECLARE @Codes int
SET @Codes = 0

-- string of comma-separated codes
SET @CodeSequence = 'ZZZ,ABC,FGH,YYY,BBB,CCC'

----loop through and create index and populate @CodeList
WHILE @Codes*4 < LEN(@CodeSequence)
BEGIN
    SET @ThisCode = SUBSTRING(@CodeSequence,@Codes*4+1,3)
    SET @Codes = @Codes + 1
    INSERT @CodeList (Seq, Code) VALUES (@Codes, @ThisCode)
END

SELECT Seq, Code from @CodeList

最佳答案

以下是我见过的唯一两种准确工作的方法:

第一个使用 CHARINDEX (类似于 Gordon 的,但我认为 WHERE 语句使用 IN 更准确):

SELECT *
FROM Sample
WHERE Code IN ('Beta','Echo','Alpha')
ORDER BY CHARINDEX(Code+',','Beta,Echo,Alpha,')

用代码连接逗号应确保子匹配不会影响结果。

或者,您可以使用 CASE 语句:
SELECT *
FROM Sample
WHERE Code in ('Beta','Echo','Alpha')
ORDER BY CASE
  WHEN Code = 'Beta' THEN 1
  WHEN Code = 'Echo' THEN 2
  WHEN Code = 'Alpha' THEN 3
END

SQL Fiddle Demo

Updated Demo 与子匹配。

关于sql - 根据提供的值序列添加行号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15169536/

10-15 19:46