0

如何在 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,但也没有用。

谢谢你。

4

3 回答 3

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
于 2013-11-10T14:17:34.547 回答
0

正如我所见,您的行必须按字母顺序排列,所以只需在查询末尾添加:ORDER BY p.StudentName。如果这没有帮助,请添加整个查询,以便我们找出问题所在。

所以当我看到查询时,我可以解释。您尝试按列 p.StudentName 排序。此列包含 NULL。尝试按 StudentName 排序,前面不带 p。这是包含未知的表达式的别名。

于 2013-11-10T13:48:43.350 回答
0

只需在您的 SQL 语句中添加以下子句:
order by p.StudentName
Sql server 将按字母顺序对列进行排序。

于 2013-11-10T13:49:06.223 回答