回答編集履歴

3

さらに追記

2022/03/11 00:38

投稿

sousuke
sousuke

スコア3828

test CHANGED
@@ -48,3 +48,13 @@
48
48
  コード
49
49
  ```
50
50
 
51
+ 要件に「他クラス 学生NO→専攻順」とありますが
52
+ よく考えたら学生NOで並べたら専攻で並べる意味はないです。多分。
53
+ ```sql
54
+ select *
55
+ ,ROW_NUMBER() over(order by 入学年度,クラス,case when クラス='E' then 専攻 end,学生NO) as 採番
56
+ from 学生テーブル
57
+ order by 採番
58
+ ```
59
+ なので最後の専攻のorderは外しても結果は同じです。
60
+

2

仕様変更

2022/03/11 00:30

投稿

sousuke
sousuke

スコア3828

test CHANGED
@@ -22,3 +22,29 @@
22
22
  ORDER BY 採番
23
23
  ```
24
24
  純粋な方を先に書けばよかった…
25
+
26
+ ### 仕様変更
27
+ こうかな?order by内でもcaseは切れます。
28
+ 前半はテストテーブル作成用なので下3行だけ
29
+ ```sql
30
+ ;with 学生テーブル(クラス,学生NO,専攻,入学年度) as (
31
+ select 'A' ,'001','専攻05','2021年入学'
32
+ union all select 'A' ,'002','専攻03','2019年入学'
33
+ union all select 'A' ,'003','専攻01','2021年入学'
34
+
35
+ union all select 'E' ,'004','専攻05','2019年入学'
36
+ union all select 'E' ,'005','専攻03','2021年入学'
37
+ union all select 'E' ,'006','専攻01','2021年入学'
38
+
39
+ union all select 'F' ,'007','専攻05','2019年入学'
40
+ union all select 'F' ,'008','専攻03','2021年入学'
41
+ union all select 'F' ,'009','専攻01','2021年入学'
42
+ )
43
+
44
+ select *
45
+ ,ROW_NUMBER() over(order by 入学年度,クラス,case when クラス='E' then 専攻 end,学生NO,専攻) as 採番
46
+ from 学生テーブル
47
+ order by 採番
48
+ コード
49
+ ```
50
+

1

追記

2022/03/10 04:43

投稿

sousuke
sousuke

スコア3828

test CHANGED
@@ -13,3 +13,12 @@
13
13
  Eクラス以外でも全員の専攻が同じ前提があるなら
14
14
  Eクラスだけ専攻を見るのではなく全クラス専攻双方をみて並べればいいと思います。
15
15
  それ以外の状態だったとしてもcase when クラス='E' then とかすれば並び順は自由にできます。
16
+
17
+ ### 追記
18
+ ```SQL
19
+ SELECT 学生NO,クラス,名前,ふりがな,専攻
20
+ ,ROW_NUMBER() over(order by クラス,専攻 desc,名前,ふりがな) as 採番
21
+ FROM 学生TABLE
22
+ ORDER BY 採番
23
+ ```
24
+ 純粋な方を先に書けばよかった…