【发布时间】:2017-06-05 06:53:40
【问题描述】:
我有一个要求,我需要按特定顺序对存储过程返回的结果集游标中的记录进行排序。例如,假设 SP 返回了 10 条记录。结果包含一个名为 FLD1 的字段。 FLD1 值存在于另一个表中的记录必须放在结果集的顶部。即在像SELECT * FROM RESULTS WHERE FLD1 IN (SELECT FLD2 FROM TABLE2) 这样的查询中使用时,FLD1 值返回结果的记录必须放在结果集的顶部,不返回任何记录的记录必须放在后面。
我遵循的方法是首先选择满足条件FLD1 IN (SELECT FLD2 FROM TABLE2) 的记录并分配 seq.no 1 并将结果存储在临时表中。然后选择不满足条件FLD1 IN (SELECT FLD2 FROM TABLE2)的记录,并为其分配一个序列2。最后,合并结果并在SP按序列号排序的末尾打开一个结果游标。
如果您知道一种方法,请提出任何更好的方法。我正在考虑使用像 CASE WHEN FLD1 IN (SELECT FLD2 FROM TABLE2) THEN "1" ELSE "2" 这样的 CASE 语句。但这似乎在 DB2 中不起作用。
【问题讨论】:
-
能否提供一些代码和测试用例。然后告诉我们哪些有效,哪些无效?
标签: db2 ibm-midrange