我有一个表 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 的限制。然而,这意味着额外的空间、维护等......
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/