我对SQL很陌生,我将如何对以下内容进行排序:
我有三种不同类型的dev项目(类型1、2和3)。类型1和2也有一个与它们相关联的分析。分析和dev类型1和2将具有一个链接父id,我将如何与这些规范进行排序:
按以下顺序处理项
*EDIT*下的ParentID应该放在这三种规格之后的第一位
表的示例列是:
|ParentID| AnalysisItemID | DevItemId | DevType |
1 Null 2 1
4 5 Null Null
6 8 Null Null
8 Null 9 3
6 Null 7 2
1 3 Null Null排序后的输出为:
|ParentID| AnalysisItemID | DevItemId | DevType |
8 Null 9 3
1 Null 2 1
1 3 Null Null
6 Null 7 2
6 8 Null Null
4 5 Null Null发布于 2013-08-02 13:21:43
在我看来,您似乎希望按照父id对数据进行排序,并根据父类的最大devtype排序。
为此,您需要连接到汇总表以获取order by的信息。
select t.*
from t join
(select parentId, max(devtype) as maxdt
from t
group by parentId
) p
on t.parentId = p.parentId
order by (case when maxdt = 3 then 1
when maxdt in (1, 2) then 2
else 3
end), parentId, devtype desc发布于 2013-08-02 13:17:08
它很难看,但您可以根据CASE在SQL中的结果进行排序。我想象一些类似于:
SELECT * FROM MyTable
ORDER BY CASE WHEN DevType = 3 THEN 1
WHEN DevType IN (1, 2) THEN AnalysisItemID + 1
ELSE [bignumber] + AnalysisItemID END做你想做的事。
显然,如果需要的话,case也可以封装到用户定义的函数中以提高可读性。然而,这有可能会影响性能。
https://stackoverflow.com/questions/18017747
复制相似问题