1

我是 SQL 新手,我将如何对以下内容进行排序:

我有三种不同类型的开发项目(类型 1、2 和 3)。类型 1 和 2 也有与之相关的分析。分析和开发类型 1 和 2 将具有链接父 ID,我将如何使用这些规范进行排序:

按以下顺序处理项目

  • 开发类型 3 项目
  • 开发类型 1 或 2 项目与其分析项相结合(开发项列优先于分析项列)
  • 没有相关开发项目的剩余分析项目

*编辑*较低的 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
4

2 回答 2

1

对我来说,您似乎想按父 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-02T13:21:43.863 回答
0

这很难看,但您可以按CASESQL 中的结果排序。我想象类似的东西:

SELECT * FROM MyTable
   ORDER BY CASE WHEN DevType = 3 THEN 1
                 WHEN DevType IN (1, 2) THEN AnalysisItemID + 1
                 ELSE [bignumber] + AnalysisItemID END

可以做你需要的。

显然,case如果需要,也可以将其封装到用户定义的函数中以提高可读性。但是,这有可能会影响性能。

于 2013-08-02T13:17:08.917 回答