在T-SQL中排列行

时间:2013-11-10 13:42:58

标签: sql-server tsql rows

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

谢谢。

3 个答案:

答案 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将按字母顺序对列进行排序。