回答編集履歴

5

名前変更

2019/03/07 01:07

投稿

FKM
FKM

スコア3608

test CHANGED
@@ -6,4 +6,4 @@
6
6
 
7
7
  【お詫び】
8
8
 
9
- 以下記述していたSQLはsaji氏から回答にそぐわないとの意見をいただき、削除しました。まだまだ勉強が必要です。
9
+ 以下記述していたSQLはsazi氏から回答にそぐわないとの意見をいただき、検証の結果削除しました。まだまだ勉強が必要です。

4

お詫び

2019/03/07 01:07

投稿

FKM
FKM

スコア3608

test CHANGED
@@ -4,30 +4,6 @@
4
4
 
5
5
 
6
6
 
7
- そこで、ステータスが3種類ある場合は完了、2種類の場合は取消、1種類の場合は削除という風に、case文を使って切り替えていけばいけるのではないかと思います。case文は何も難しく考えることありません(switch文と同じ要領です)
7
+ 【お詫び】
8
8
 
9
-
10
-
11
- [SQL Server CASEの使い方 条件分岐](https://sql-oracle.com/sqlserver/?p=1037)
12
-
13
-
14
-
15
- ```SQL
16
-
17
- create view 状態確認 as
18
-
19
- select 親ID
20
-
21
- , (select 状態 from 案件一覧 where 親ID=t.親ID and No=0) as 状態0
9
+ 以下記述していたSQLはsaji氏から回答にそぐわないとの意見をいただき、削除しました。まだまだ勉強が必要です。
22
-
23
- , (select case count(id) when 3 then '進行' when 2 then '取消' when 1 then '削除' end from 案件一覧 where 親ID=t.親ID and No=1) as 状態1
24
-
25
- , (select case count(id) when 3 then '進行' when 2 then '取消' when 1 then '削除' end from 案件一覧 where 親ID=t.親ID and No=2) as 状態2
26
-
27
- from 案件一覧 t
28
-
29
- where ID=親ID
30
-
31
- ```
32
-
33
- もし、それ以上ステータスコードがある場合、whenの条件を増やして対応してください。

3

リンク付与

2019/03/07 01:06

投稿

FKM
FKM

スコア3608

test CHANGED
@@ -4,7 +4,13 @@
4
4
 
5
5
 
6
6
 
7
- そこで、ステータスが3種類ある場合は完了、2種類の場合は取消、1種類の場合は削除という風に、case文を使って切り替えていけばいけるのではないかと思います。
7
+ そこで、ステータスが3種類ある場合は完了、2種類の場合は取消、1種類の場合は削除という風に、case文を使って切り替えていけばいけるのではないかと思います。case文は何も難しく考えることありません(switch文と同じ要領です)
8
+
9
+
10
+
11
+ [SQL Server CASEの使い方 条件分岐](https://sql-oracle.com/sqlserver/?p=1037)
12
+
13
+
8
14
 
9
15
  ```SQL
10
16
 

2

case文に切り替え

2019/03/06 12:04

投稿

FKM
FKM

スコア3608

test CHANGED
@@ -1,12 +1,10 @@
1
1
  まず、現状のエラーが出るのはビューでサブクエリを作る場合は必ず1つの答えでないといけないためです。
2
2
 
3
- 例に照らし合わせるとC1の2のステータスに対し、削除、取消、完了の3種類が該当し、どの値を参照していいのか分からないので、エラーを発します。
3
+ 例に照らし合わせるとC1の2のステータスに対し、削除、取消、進行の3種類が該当し、どの値を参照していいのか分からないので、エラーを発します。
4
4
 
5
5
 
6
6
 
7
- そこで、条件としてステータスの削除、取消はなかったことにして進行ステータスだけ残したうことすが、それらば、検索条件に削除、取消は除外すればいいでしょう
7
+ そこで、ステータスが3種類ある場合は完了、2種類場合は取消、1種類の場合削除いう風に、case文使って切り替えてけばけるのないかと思ます
8
-
9
-
10
8
 
11
9
  ```SQL
12
10
 
@@ -16,9 +14,9 @@
16
14
 
17
15
  , (select 状態 from 案件一覧 where 親ID=t.親ID and No=0) as 状態0
18
16
 
19
- , (select 状態 from 案件一覧 where 親ID=t.親ID and No=1) as 状態1
17
+ , (select case count(id) when 3 then '進行' when 2 then '取消' when 1 then '削除' end from 案件一覧 where 親ID=t.親ID and No=1) as 状態1
20
18
 
21
- , (select 状態 from 案件一覧 where 親ID=t.親ID and No=2 and 状態 not in('削除','取消')) as 状態2
19
+ , (select case count(id) when 3 then '進行' when 2 then '取消' when 1 then '削除' end from 案件一覧 where 親ID=t.親ID and No=2) as 状態2
22
20
 
23
21
  from 案件一覧 t
24
22
 
@@ -26,6 +24,4 @@
26
24
 
27
25
  ```
28
26
 
29
-
30
-
31
- はあくまでステータスコードが2の場合のみの対処で、1や0も同様のケースがある場合、not in句付与すれば大丈夫です
27
+ もし、そ以上ステータスコードがある場合、whenの条件増やして対応してください

1

修正

2019/03/06 11:58

投稿

FKM
FKM

スコア3608

test CHANGED
@@ -1,6 +1,6 @@
1
- まず、現状のエラーが出るのはビューでサブクエリを作る場合は必ず1つの答えでないといけません
1
+ まず、現状のエラーが出るのはビューでサブクエリを作る場合は必ず1つの答えでないといけないためです
2
2
 
3
- 例に照らし合わせるとC1の2のステータスに対し、削除、取消、完了の3種類が該当するので、どの値を参照していいのか分からないので、エラーを発します。
3
+ 例に照らし合わせるとC1の2のステータスに対し、削除、取消、完了の3種類が該当、どの値を参照していいのか分からないので、エラーを発します。
4
4
 
5
5
 
6
6