如何在字段的末尾添加其他订单,并按field_id排序记录,但订单的方式应与IN子句32015102、32015100、32015101、32015105中设置的方式相同。数字可以改变,并且可以增加或减少。
select * from dba.form_data where form_id = 207873 and field_id in (32015102,32015100, 32015101, 32015105 )
order by sub_id, array_number
答案 0 :(得分:1)
IN
子句包含一组无序的值。 IN (1,2,3)
和IN (3,2,1)
被认为是相等的。
因此,您必须添加一些订购条件。对于您的情况,您需要32015102首先,32015100第二个,依此类推。用适当的排序键为DBMS提供值。例如:
select *
from dba.form_data fd
join
(
select 32015102 as value, 1 as sortkey
union all
select 32015100 as value, 2 as sortkey
union all
select 32015101 as value, 3 as sortkey
union all
select 32015105 as value, 4 as sortkey
) criteria on criteria.value = fd.field_id
where fd.form_id = 207873
order by criteria.sortkey;
答案 1 :(得分:0)
我的一个数据库上的TSQL解决方案:
WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) AS a,
* FROM (VALUES (21963), (21961), (27665)) AS X(b)
)
SELECT tpb.AutoId FROM dbo.TPB AS tpb
JOIN CTE ON CTE.b = tpb.AutoId
ORDER BY CTE.a
逐步:
行构造函数语法:SELECT * FORM(VALUES(1),(2),(3))X(a) 创建一个名为X的表,该表的a列包含1,2,3。
ROW_NUMBER():我需要行号来对数组进行最终排序。它需要一个over子句,所以我使用了伪OVER(ORDER BY(SELECT NULL)),它是无序的。
将其封装在CTE中,然后从目标表中选择并按所需顺序将其与CTE联接,然后使用相应的row_numbers对其进行排序。