请考虑以下数据:
Id F1 F2 Ref_ID
-------------------------------------------
1 Nima 35 Null
2 Eli 33 Null
3 Arian 5 1
4 Ava 1 1
5 Arsha 3 2
6 Rozhan 30 1
7 Zhina 20 2
我想像这样对表进行排序:
Id F1 F2 Ref_ID
-------------------------------------------
1 Nima 35 Null
3 Arian 5 1
4 Ava 1 1
6 Rozhan 30 1
2 Eli 33 Null
5 Arsha 3 2
7 Zhina 20 2
基于ID升序,引用的记录应放在参考记录下。
如何使用LINQ
或SQL
执行此操作。谢谢
答案 0 :(得分:2)
在SQL中,您可以使用Ref_id和ID使用COALESCE
或ISNULL
对其进行排序。
然后使用IIF
或CASE WHEN
来确保父ID在同一组Ref_id中排在首位。
SELECT Id, F1, F2, Ref_ID
FROM YourTable
ORDER BY COALESCE(Ref_ID, Id), IIF(Ref_ID IS NULL, 0, 1), Id;
对 db <>小提琴here
的测试答案 1 :(得分:1)
这是一个更简单的解决方案:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'HOST': 'xxx', #has been hide for this post
'PORT': '1433',
'NAME': 'BBL_Result',
#'ODBC_DSN': 'BBL'
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'extra_params': "Persist Security Info=FALSE;server=xxx", #has been hide for this post
},
},
}
结果:
答案 2 :(得分:1)
使用LINQ,您可以这样做:
from i in data
orderby i.Ref_ID ?? i.Id
select i;
答案 3 :(得分:0)
另一种解决方案是在查询中添加额外的列,然后对该列进行排序
select t.*
from ( select Id,
F1,
F2,
Ref_ID,
coalesce(Ref_ID, Id) as RefID_or_Id,
iif(Ref_ID is null, 0, 1) as Ref_ID_0_or_1
from YourTable
) t
order by t.RefID_or_Id,
t.Ref_ID_0_or_1,
t.Id
如果您的桌子很大,则应测试其中最适合您的解决方案