【问题标题】:Get the Records as per the given OrderId only仅根据给定的 OrderId 获取记录
【发布时间】:2014-05-29 10:13:17
【问题描述】:

我有一个带有主键和自动递增列的表,可以说“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 

提前致谢

【问题讨论】:

  • 很难理解你在问什么。您是否要对查询结果进行排序?
  • 您的意思是按给定顺序按结果排序吗?
  • @user3017179 您是否希望按照 IN 子句指定的 HeaderFieldID 值的顺序进行排序?
  • 是的,布兰登,你是对的
  • @user3017179:接受正确答案!!

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


【解决方案1】:

我不知道您是否可以通过 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

【讨论】:

  • 是的,您的查询运行良好...谢谢您在这里创建了拆分功能并加入了这些表。
【解决方案2】:

不清楚这个列表来自哪里(作为存储过程的参数还是在 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

【讨论】:

    【解决方案3】:

    我已经解决了我的问题。

    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')
    

    【讨论】:

    • 这行不通。尝试将它与 (12,3,1,2) 一起使用,猜猜我为什么在答案中使用','+CAST(HeaderFieldID as varchar(100))+','
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多