仅按给定的OrderId获取记录

时间:2014-05-29 10:13:17

标签: sql sql-server sql-server-2008-r2 sql-server-2012

我有一个带有主键和自动增量列的表,可以说“HeaderFieldID”。 现在我想根据HeaderFieldID值获取记录。

例如:

select * 
from tblHeaderField 
where HeaderFieldID in (2,1,3,4,6,5)

但是,默认情况下,我通过HeaderFieldID asc命令获取记录。但是我只想按照给定的HeaderFieldID来记录。

原始表

HeaderFieldID       HFName       DisplayName
      1              OrgName1      disp1
      2              OrgName2       disp2 
      3              OrgName3       disp3 
      4              OrgName4       disp4 
      5              OrgName5       disp5 
      6              OrgName6       disp6 

先谢谢

3 个答案:

答案 0 :(得分:0)

我不知道你是否可以通过IN订购,因为你不知道订单。 首先,我将数据从IN拆分为行,然后将其加入到您的表中。

DECLARE @table TABLE (ID INT IDENTITY(1,1) NOT NULL, NR INT)

--Prodvide data to lookup
DECLARE @givenText VARCHAR(100) = '2,1,3,4,5,6,7,8,9,10,11,12,13,14,15'


-- Split requested string into rows and add unique number
;WITH xmlData (xmlData) AS (
    SELECT CAST('<x>'+REPLACE(@givenText, ',', '</x><x>')+'</x>' AS XML) AS xmlData
)
INSERT INTO @table (NR) 
SELECT x.value('.','INT') AS NR
FROM xmlData
CROSS APPLY xmlData.xmlData.nodes('//x') AS func(x)


--Join tables to get result
SELECT tHF.* 
FROM tblHeaderField AS tHF
INNER JOIN @table AS T
    ON T.NR = tHF.HeaderFieldID
ORDER BY T.ID

答案 1 :(得分:0)

不清楚此列表的来源(作为存储过程的参数或SQL语句中的硬编码?)。试试这个问题:

select * 
from tblHeaderField 
where HeaderFieldID in (2,1,3,4,6,5)
ORDER BY 
   CHARINDEX(','+CAST(HeaderFieldID  as varchar(100))+','
              ,',2,1,3,4,6,5,')

SQLFiddle demo

答案 2 :(得分:0)

我已经解决了我的问题。

SELECT * FROM tblHeaderField
WHERE HeaderFieldID in (5,6,2,1,3,4,7,8,9,10,11,12,13,14,15)
ORDER BY CHARINDEX(CAST(HeaderFieldID AS VARCHAR), '5,6,2,1,3,4,7,8,9,10,11,12,13,14,15')