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

しかし、うまくいきませんでした。StudentIDがnullの場合、「NULL」を「Unknown」に変更するというクエリで書いたように、UnknownはNULL値からのものであるため、問題の根源だと思います。これは結果の「頑固な」順序に影響していますか? ちなみに、私も試し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 に答える