Sql server 按字母顺序带子组的t-sql Order Union语句

Sql server 按字母顺序带子组的t-sql Order Union语句,sql-server,tsql,Sql Server,Tsql,我真的希望我只是有一个重大的大脑冻结。我有一个关于3个工会的问题。查询1检索学校,查询2检索学校内的学院,查询3检索每个学院内的路径。我希望最终排序的产品如下所示: 学校 A学院 途径1 途径2 B学院 途径1 C学院 途径1 途径2 途径3 我下面的问题就是这样的;但是我希望学院按字母顺序排列,这就是我努力的方向。我是否忽略了一些显而易见的事情 我的问题是: Declare @schoolID int = 76 Select l.schoolID schoolID,

我真的希望我只是有一个重大的大脑冻结。我有一个关于3个工会的问题。查询1检索学校,查询2检索学校内的学院,查询3检索每个学院内的路径。我希望最终排序的产品如下所示:

学校 A学院 途径1 途径2 B学院 途径1 C学院 途径1 途径2 途径3

我下面的问题就是这样的;但是我希望学院按字母顺序排列,这就是我努力的方向。我是否忽略了一些显而易见的事情

我的问题是:

Declare @schoolID int = 76

Select  l.schoolID      schoolID,
        null            academyID,
        null            pathwayID,
        l.locationName  targetName, 
        cast((1 - sum(ttlDaysMissed) / sum(ttlSchoolDays)) * 100 as decimal(5,1)) pct,
        1               srt1
From    cacheAttendanceAOLStudents aas
        Join dimLocation l on l.schoolID = aas.schoolID 
Where   aas.schoolID = @schoolID
Group by l.schoolID, l.locationName

UNION 
Select  aas.schoolID,
        a.aolAcademyID,
        null,
        a.academyName,
        cast((1 - sum(ttlDaysMissed) / sum(ttlSchoolDays)) * 100 as decimal(5,1)) pct,
        2
From    cacheAttendanceAOLStudents aas
        Join aolPathwayLocations pl on pl.aolPathwayLocationID = aas.aolPathwayLocationID
        Join aolAcademies a on a.aolAcademyID = pl.aolAcademyID
Where   aas.schoolID = @schoolID
Group by aas.schoolID, a.aolAcademyID, a.academyName

UNION 

Select  aas.schoolID,
        pl.aolAcademyID,
        pl.aolPathwayID,
        p.academyPathway,
        cast((1 - sum(ttlDaysMissed) / sum(ttlSchoolDays)) * 100 as decimal(5,1)) pct,
        2
From    cacheAttendanceAOLStudents aas
        Join aolPathwayLocations pl on pl.aolPathwayLocationID = as.aolPathwayLocationID
        Join aolPathways p on p.aolPathwayID = pl.aolPathwayID
Where   aas.schoolID = @schoolID
Group by aas.schoolID, pl.aolAcademyID, pl.aolPathwayID, p.academyPathway
order by srt1
下面是要运行的查询,以给出结果:

Select 76 schoolID, null academyID, null pathwayID, 'Doss High' targetName, 91.2 pct, 1 srt1
UNION 
Select 76, 24, null, 'Academy Not Identified', 90.6, 2
UNION 
Select 76, 11, null, 'Freshman Academy', 93.4, 2
UNION 
Select 76, 24, 55, 'Pathway Not Identified', 90.6, 2
UNION 
Select 76, 11, 55, 'Pathway Not Identified', 93.4, 2
order by srt1
这是完成的结果集的样子…如果“targetNames”按正确的字母顺序排列,它将是完美的

schoolID    academyID   pathwayID   targetName              pct    srt1
76          NULL        NULL        Doss High               91.2    1
76          11          NULL        Freshman Academy        93.4    2
76          11          55          Pathway Not Identified  93.4    2
76          24          NULL        Academy Not Identified  90.6    2
76          24          55          Pathway Not Identified  90.6    2

您只需要按targetname排序,而不是按srt1排序

Select 76 schoolID, null academyID, null pathwayID, 'Doss High' targetName, 91.2 pct, 1 srt1
UNION 
Select 76, 24, null, 'Academy Not Identified', 90.6, 2
UNION 
Select 76, 11, null, 'Freshman Academy', 93.4, 2
UNION 
Select 76, 24, 55, 'Pathway Not Identified', 90.6, 2
UNION 
Select 76, 11, 55, 'Pathway Not Identified', 93.4, 2
order by targetName;
联合末尾的
orderby
子句将按所有联合结果集排序

“targetNames”将按正确的字母顺序排列:

| schoolID | academyID | pathwayID |             targetName |  pct | srt1 |
|----------|-----------|-----------|------------------------|------|------|
|       76 |        24 |    (null) | Academy Not Identified | 90.6 |    2 |
|       76 |    (null) |    (null) |              Doss High | 91.2 |    1 |
|       76 |        11 |    (null) |       Freshman Academy | 93.4 |    2 |
|       76 |        11 |        55 | Pathway Not Identified | 93.4 |    2 |
|       76 |        24 |        55 | Pathway Not Identified | 90.6 |    2 |

orderbysrt1,targetName
很抱歉,我看到我最初的一些帖子被“压扁”了。我希望学校的名称在第一行(没有学院或通道ID的学校)。然后,我希望按照字母顺序列出学院(没有路径ID的学院)……但是,在每个学院之间,我希望列出与该学院相关的路径(即“Doss High”、“Academy Not Identified”、“pathway Not Identified”、“Fresh Academy”、“pathway Not Identified”)。因此,添加排序字段首先会给我学校名称,但我不知道如何混合/排序学院和路径。。。