sql-server-2008 - 在sql server中选择不排序的记录

标签 sql-server-2008

我有一个表 TempImport,所选的查询结果显示为图像。但我想使用 SQL Server 按 tempImport 表中的顺序按代码顺序获取结果

选择查询是:

SELECT DISTINCT Code,
    (dd.dd_receipt_no)
FROM   TempImport tm WITH(NOLOCK)
    INNER JOIN depositor_mast dm WITH(NOLOCK)
            ON  tm.Code = dm.dm_code
    INNER JOIN deposit_detl dd WITH(NOLOCK)
            ON  dm.dm_srno = dd.dd_dm_srno
WHERE  dd.dd_dt_code IN ('PDFP', 'PDFD', 'PDFE')
    AND tm.Remark = 'OK'
    AND dm.dm_dep_ind = 'PDEP'
    AND dd.dd_delind = 'L'
    AND dd.dd_exit_date = 0
    AND (dd.Certificate_No = '' OR dd.Certificate_No IS NULL)

Image shows TempImport , Selected Result and Required Result

最佳答案

您实际上是在要求自定义排序顺序。有几种方法可以解决这个问题,恕我直言,没有一种方法很漂亮。
1. 由于您无法修改原始表,您可以创建一个辅助表(常规或临时表),其中包含要排序的列和排序顺序列。这是 Arvo 建议的另一种方法,但它可以解决您对不修改 tempImport 的限制。然而,这意味着额外的空间、维护等......

  • 您可以编写一个 RBAR 查询来遍历自定义排序顺序的值,在本例中是 tempImport 表中的 Code 列。使用少量行可以正常工作,当您的表变得非常大时,痛苦会增加到查询无法使用的程度。本质上,您的查询将类似于
  • SELECT a,b,c FROM ......<your stuff here>.... ...<more of your stuff>... ORDER BY CASE a WHEN 'G05198' THEN 1 WHEN 'K10739' THEN 2 WHEN 'B11737' THEN 3 ELSE a END
    您可以使用参数对其进行调整以使其更健壮,但基本前提不会改变:您正在逐行处理,因此随着数据集的增长,请注意性能问题。也许这足以为您争取一些时间来获得修改模式的权力,这样您就可以摆脱这种情况。

    关于sql-server-2008 - 在sql server中选择不排序的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36354559/

    相关文章:

    sql-server - 为什么我的表值参数在到达数据库时为空?

    sql-server-2008 - 查找一行中最后一个非空值的列名

    sql-server - GUID:varchar(36) 与 uniqueidentifier

    sql - 针对不同服务器的条件 SQL

    具有 Entity Framework 的 SQL Server xml 列 - 如何保留无关紧要的空格

    SQL 服务器 : trigger on Insert alter input

    sql-server - 同一个店铺流程的时间成本差异巨大

    sql - 在 SQL Server 中将 XML 转换为 XML 数据类型

    sql-server - 如何确定哪个查询在 SSMS 2014 中更有效

    sql-server-2008 - 如何使用 T-SQL 重命名列名