【发布时间】:2022-01-01 16:36:47
【问题描述】:
我想按列名称排序,该列名称在同一列中具有 "Value1" Space "Value2" 之类的值。 例如。
| Column1 |
|---|
| Value1 value2 |
| NSPP02 2111 |
| NSPP02 2110 |
| NSPP01 2111 |
我想先按 value2 排序,然后按 value1 排序。 ASC 按值 2,然后按值 1 ASC。
我使用聚合如下:
select
pdc.semester as Semester,
count(pdc.CNIC) as TotalRegistrations,
count(s.studentid) as TotalRegistered,
count(case when r.Grade is not null then 'Appeared' end) as Appeared,
count(case when r.Grade='f' then 'fail' end) as Failed,
count(case when r.grade <>'f' then 'pass' end) as Passed
from
PDC_PreRegistration pdc
left join
Students s on pdc.Semester = s.CurSemester and s.nic = pdc.CNIC
left join
studentresultnet r on s.studentid = r.studentid and s.CurSemester = r.Semester
left join
semester se on se.Semester = r.Semester
where
pdc.semester in (select CurSemester from students where batch = 'PD2110')
group by
pdc.Semester
order by
semester desc
本次查询的结果如下:
| Semester | TotalRegistrations | TotalRegistered | Appeared | Failed | Passed |
|---|---|---|---|---|---|
| NSPP02 2111 | 121 | 81 | 0 | 0 | 0 |
| NSPP02 2110 | 37 | 35 | 24 | 1 | 23 |
| NSPP01 2111 | 76 | 42 | 0 | 0 | 0 |
我希望结果是这样的:
| Semester | TotalRegistrations | TotalRegistered | Appeared | Failed | Passed |
|---|---|---|---|---|---|
| NSPP02 2110 | 37 | 35 | 24 | 1 | 23 |
| NSPP01 2111 | 76 | 42 | 0 | 0 | 0 |
| NSPP02 2111 | 121 | 81 | 0 | 0 | 0 |
按值 2 进行 ASC,然后按值 1 进行 ASC。
学期列的示例序列如下:
- NSPP01 2110
- NSPP02 2110
- NSPP01 2111
- NSPP02 2111
- NSPP01 2112
- NSPP02 2112
- NSPP01 2201
- NSPP02 2201
- NSPP01 2202
- NSPP02 2202
- NSPP01 2203
- NSPP02 2203
- 等等
查看此屏幕截图:
【问题讨论】:
-
如果您对单独的部分感兴趣,将两个值存储在一列中是个坏主意。相应地改变你的桌子设计,你已经解决了这个问题。
标签: sql tsql sql-order-by ssms