如何在T-SQL中手动排列行?
我的表格结果如下:
但预期结果应为:
编辑:
我的整个查询是:
select (case when s.StudentID is null then 'Unknown' else s.StudentName end) as StudentName from Period pd full join Course c on pd.TimeID = c.TimeID full join Student s on c.StudentID = s.StudentID
group by s.StudentName, s.StudentID
order by case s.StudentName
when 'Charlie' then 1
when 'Dave' then 2
when 'Lisa' then 3
when 'Mary' then 4
when 'Unknown' then 5
end
但它不起作用。我认为问题根源是因为Unknown来自NULL值,因为我在该查询中写道,当StudentID为null时,将“NULL”更改为“Unknown”。这会影响结果的“顽固”顺序吗?顺便说一句,我也试过order by s.StudentName asc
但也没有用。
谢谢。
答案 0 :(得分:1)
尝试以下方法......
SELECT os.StudentName
FROM ( SELECT CASE WHEN s.StudentID IS NULL THEN 'Unknown'
ELSE s.StudentName
END AS StudentName
FROM Period pd
FULL JOIN Course c ON pd.TimeID = c.TimeID
FULL JOIN Student s ON c.StudentID = s.StudentID
GROUP BY s.StudentName ,
s.StudentID
) AS os
ORDER BY os.StudentName
编辑:根据评论......
当我使用它时,它工作正常...注意Order By
没有标识符
declare @tblStudent TABLE (StudentID int, StudentName varchar(30));
insert into @tblStudent values (null, '');
insert into @tblStudent values (1, 'Charlie');
insert into @tblStudent values (2, 'Dave');
insert into @tblStudent values (3, 'Lisa');
insert into @tblStudent values (4, 'Mary');
SELECT CASE WHEN s.StudentID IS NULL THEN 'Unknown'
ELSE s.StudentName
END AS StudentName
FROM @tblStudent s
GROUP BY s.StudentName ,
s.StudentID
ORDER BY StudentName
答案 1 :(得分:0)
我看到您的行必须按字母顺序排序,因此只需在查询末尾添加:ORDER BY p.StudentName
。
如果没有帮助,请添加整个查询,以便我们找出问题。
所以,当我看到查询时,我可以解释一下。您尝试按列p.StudentName排序。此列包含NULL。尝试在没有p的情况下按StudentName排序。这是包含Unknown的表达式的别名。
答案 2 :(得分:0)
只需在您的SQL语句中添加以下子句:
order by p.StudentName
Sql server将按字母顺序对列进行排序。