ORDER BYについて質問です。

せんな
2014-03-03 18:54 1677 2
ORDER BYについて質問です。
使用環境はSQLSERVER2008です。

成績というカラムに優、良、可、不可という値が入っていたとします。
これを一覧表示し、任意のソート順でならべることができるかどうか知りたいです。

例えば、良、可、不可、優といった順でソートさせるにはどのようにすればよいでしょう?
ORDER BY句で制御できるものでしょうか?

よろしくお願いします。

コメント

2014年 03月 10日 (12:38)
こんにちは。
イノ(inno)です。

ふ~ん。。一応簡単に作成してみました。
これで大丈夫ですかね。
下記のようにJOINを利用してする方法があります。

まず、テストの為に下記のSQLを実行してテーブルとデータを登録してください。

-- #### テーブル作成
CREATE TABLE dbo.TempData
(
UserID varchar(10)
, UserResult nvarchar(10)
)

-- #### テーストデータ登録
INSERT INTO dbo.TempData
SELECT 'A', N'良' UNION ALL
SELECT 'B', N'良' UNION ALL
SELECT 'C', N'優' UNION ALL
SELECT 'D', N'不可' UNION ALL
SELECT 'E', N'優' UNION ALL
SELECT 'F', N'可' UNION ALL
SELECT 'G', N'可' UNION ALL
SELECT 'H', N'不可' UNION ALL
SELECT 'I', N'良'

-- #### データ確認
SELECT * FROM dbo.TempData


-- #### 下記から結果抽出するSQLです。一つずつ実行してみてください。

-- #### 整列:良、可、不可、優
SELECT B.UserID, B.UserResult FROM
(
SELECT 1 Code1, 2 Code2, 3 Code3, N'良' UserResult UNION ALL
SELECT 2 Code1, 3 Code2, 2 Code3, N'可' UserResult UNION ALL
SELECT 3 Code1, 4 Code2, 1 Code3, N'不可' UserResult UNION ALL
SELECT 4 Code1, 1 Code2, 4 Code3, N'優' UserResult
) AS A JOIN dbo.TempData AS B
ON A.UserResult = B.UserResult
ORDER BY A.Code1


-- #### 整列:優、良、可、不可
SELECT B.UserID, B.UserResult FROM
(
SELECT 1 Code1, 2 Code2, 3 Code3, N'良' UserResult UNION ALL
SELECT 2 Code1, 3 Code2, 2 Code3, N'可' UserResult UNION ALL
SELECT 3 Code1, 4 Code2, 1 Code3, N'不可' UserResult UNION ALL
SELECT 4 Code1, 1 Code2, 4 Code3, N'優' UserResult
) AS A JOIN dbo.TempData AS B
ON A.UserResult = B.UserResult
ORDER BY A.Code2


-- #### 整列:不可、可、良、優
SELECT B.UserID, B.UserResult FROM
(
SELECT 1 Code1, 2 Code2, 3 Code3, N'良' UserResult UNION ALL
SELECT 2 Code1, 3 Code2, 2 Code3, N'可' UserResult UNION ALL
SELECT 3 Code1, 4 Code2, 1 Code3, N'不可' UserResult UNION ALL
SELECT 4 Code1, 1 Code2, 4 Code3, N'優' UserResult
) AS A JOIN dbo.TempData AS B
ON A.UserResult = B.UserResult
ORDER BY A.Code3
せんな 2014年 03月 10日 (17:36)
勉強になりました。
ありがとうございます。