teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

名前変更

2019/03/07 01:07

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -2,4 +2,4 @@
2
2
  例に照らし合わせるとC1の2のステータスに対し、削除、取消、進行の3種類が該当し、どの値を参照していいのか分からないので、エラーを発します。
3
3
 
4
4
  【お詫び】
5
- 以下記述していたSQLはsaji氏から回答にそぐわないとの意見をいただき、削除しました。まだまだ勉強が必要です。
5
+ 以下記述していたSQLはsazi氏から回答にそぐわないとの意見をいただき、検証の結果削除しました。まだまだ勉強が必要です。

4

お詫び

2019/03/07 01:07

投稿

FKM
FKM

スコア3662

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

3

リンク付与

2019/03/07 01:06

投稿

FKM
FKM

スコア3662

answer CHANGED
@@ -1,7 +1,10 @@
1
1
  まず、現状のエラーが出るのはビューでサブクエリを作る場合は必ず1つの答えでないといけないためです。
2
2
  例に照らし合わせるとC1の2のステータスに対し、削除、取消、進行の3種類が該当し、どの値を参照していいのか分からないので、エラーを発します。
3
3
 
4
- そこで、ステータスが3種類ある場合は完了、2種類の場合は取消、1種類の場合は削除という風に、case文を使って切り替えていけばいけるのではないかと思います。
4
+ そこで、ステータスが3種類ある場合は完了、2種類の場合は取消、1種類の場合は削除という風に、case文を使って切り替えていけばいけるのではないかと思います。case文は何も難しく考えることありません(switch文と同じ要領です)
5
+
6
+ [SQL Server CASEの使い方 条件分岐](https://sql-oracle.com/sqlserver/?p=1037)
7
+
5
8
  ```SQL
6
9
  create view 状態確認 as
7
10
  select 親ID

2

case文に切り替え

2019/03/06 12:04

投稿

FKM
FKM

スコア3662

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

1

修正

2019/03/06 11:58

投稿

FKM
FKM

スコア3662

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