我正在编写某种资源管理系统。
资源是定义的实例。定义是元数据,基本上它包含属性。
这通常是我的数据库:
TypeDefinition
id name
===============
1 CPU
PropertyDefinition
id name typeDefinitionId valueType
================================================
1 frequency 1 int
2 status 1 string
TypeInstance
id name typeDefinitionId
=================================
1 CPU#1 1
2 CPU#2 1
PropertyInstanceValue
id propertyDefinitionId typeInstanceId valueType intValue StringValue FloatValue
========================================================================================
1 1 1 int 10
2 2 1 string Pending
3 1 2 int 20
4 2 2 string Approved
要求:
根据特定属性值对所有资源进行排序。
例如:根据资源的状态 对所有资源进行排序 --> 这意味着 CPU#2 将出现在 CPU#1 之前,因为“已批准”在“待定”之前。
如果我们根据频率排序,CPU#1 将出现在 CPU#2 之前,因为 10 在 20 之前。
所以我每次都需要根据不同的列(intValue/stringValue/FloatValue/等)进行排序,具体取决于属性的 valueType。
有什么建议吗?
限制:
PIVOT 是目前我们想到的唯一选择,但实际上不可能,因为数据库很大,我需要查询尽可能快。
提前致谢
迈克尔。
最佳答案
如果问题是您不想动态构建查询,则使用此order by
结构:
order by case @orderby
when 'status' then status
when 'frequency' then frequency
end
option (recompile)
您将传递 @orderby
参数。最后的recompile
option
是强制引擎根据传入的参数构建新的计划,即假设你使用的是存储过程。
关于sql - T-SQL ORDER BY 根据条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958536/