回答編集履歴
5
名前変更
answer
CHANGED
@@ -2,4 +2,4 @@
|
|
2
2
|
例に照らし合わせるとC1の2のステータスに対し、削除、取消、進行の3種類が該当し、どの値を参照していいのか分からないので、エラーを発します。
|
3
3
|
|
4
4
|
【お詫び】
|
5
|
-
以下記述していたSQLは
|
5
|
+
以下記述していたSQLはsazi氏から回答にそぐわないとの意見をいただき、検証の結果削除しました。まだまだ勉強が必要です。
|
4
お詫び
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
|
-
|
4
|
+
【お詫び】
|
9
|
-
create view 状態確認 as
|
10
|
-
select 親ID
|
11
|
-
|
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
リンク付与
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文に切り替え
answer
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
まず、現状のエラーが出るのはビューでサブクエリを作る場合は必ず1つの答えでないといけないためです。
|
2
|
-
例に照らし合わせるとC1の2のステータスに対し、削除、取消、
|
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
|
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
|
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
|
-
|
14
|
+
もし、それ以上ステータスコードがある場合、whenの条件を増やして対応してください。
|
1
修正
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
まず、現状のエラーが出るのはビューでサブクエリを作る場合は必ず1つの答えでないといけ
|
1
|
+
まず、現状のエラーが出るのはビューでサブクエリを作る場合は必ず1つの答えでないといけないためです。
|
2
|
-
例に照らし合わせるとC1の2のステータスに対し、削除、取消、完了の3種類が該当
|
2
|
+
例に照らし合わせるとC1の2のステータスに対し、削除、取消、完了の3種類が該当し、どの値を参照していいのか分からないので、エラーを発します。
|
3
3
|
|
4
4
|
そこで、条件としてステータスの削除、取消はなかったことにして、進行ステータスだけを残したいということですが、それならば、検索条件に削除、取消は除外すればいいでしょう。
|
5
5
|
|