Sql server 按字母顺序带子组的t-sql Order Union语句
我真的希望我只是有一个重大的大脑冻结。我有一个关于3个工会的问题。查询1检索学校,查询2检索学校内的学院,查询3检索每个学院内的路径。我希望最终排序的产品如下所示: 学校 A学院 途径1 途径2 B学院 途径1 C学院 途径1 途径2 途径3 我下面的问题就是这样的;但是我希望学院按字母顺序排列,这就是我努力的方向。我是否忽略了一些显而易见的事情 我的问题是: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,
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”)。因此,添加排序字段首先会给我学校名称,但我不知道如何混合/排序学院和路径。。。