回答編集履歴
5
推敲
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
追記
|
10
10
|
---
|
11
|
-
SQL Server2017なら、
|
11
|
+
SQL Server2017なら、[STRING_AGG()](http://sql55.com/query/generate-csv-string.php)も使用できるので[STRING_SPLIT()](http://sql55.com/query/split-string-bulit-in-function.php)と組み合わせて、以下のようなサンプルになります。
|
12
12
|
|
13
13
|
```SQL
|
14
14
|
create table sample(user_id varchar(255), name varchar(255), color_list varchar(255));
|
4
推敲
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
追記
|
10
10
|
---
|
11
|
-
SQL
|
11
|
+
SQL Server2017なら、```STRING_AGG()```も使用できるので以下のようなサンプルになります。
|
12
12
|
|
13
13
|
```SQL
|
14
14
|
create table sample(user_id varchar(255), name varchar(255), color_list varchar(255));
|
3
追記
answer
CHANGED
@@ -4,4 +4,29 @@
|
|
4
4
|
|
5
5
|
SQL Server 2016以降なら、```STRING_SPLIT()```と```FOR XML PATH('')```の組み合わせでSQLのみでも何とかできますが、そもそもオプション値を1つのカラムに','区切りで格納しているのですから、それをSQL上でマスターで変換しようとするのは非効率です。
|
6
6
|
|
7
|
-
SQLでの取得時に変換ではなく、データ取得後にphp側で変換したほうが良いと思います。
|
7
|
+
SQLでの取得時に変換ではなく、データ取得後にphp側で変換したほうが良いと思います。
|
8
|
+
|
9
|
+
追記
|
10
|
+
---
|
11
|
+
SQL Serverなら、```STRING_AGG()```も使用できるので以下のようなサンプルになります。
|
12
|
+
|
13
|
+
```SQL
|
14
|
+
create table sample(user_id varchar(255), name varchar(255), color_list varchar(255));
|
15
|
+
create table color(color integer, colorname varchar(255));
|
16
|
+
|
17
|
+
insert into sample values('test1','test1_name','1,2'), ('test2','test2_name','1');
|
18
|
+
insert into color values(1,'ブラック'), (2,'ホワイト');
|
19
|
+
```
|
20
|
+
```SQL
|
21
|
+
select a.user_id, a.name
|
22
|
+
, STRING_AGG(c.colorname,',') as color_name_list
|
23
|
+
from (
|
24
|
+
select *, value as color
|
25
|
+
from sample OUTER APPLY STRING_SPLIT(color_list, ',')
|
26
|
+
) a inner join color as c
|
27
|
+
on c.color = a.color
|
28
|
+
group by a.user_id, a.name
|
29
|
+
```
|
30
|
+
STRING_SPLIT()によって','区切りの文字を行として展開し、マスターと結合。
|
31
|
+
結合して取得した色の名称をSTRING_AGG()で行に纏める。
|
32
|
+
※group by しているのは、一旦行として展開されているので、再度集約する必要が有る為。
|
2
推敲
answer
CHANGED
@@ -2,6 +2,6 @@
|
|
2
2
|
|
3
3
|
上記エラーはSQL上で暗黙の型変換が行われ、オプションが一つのみ選択の場合は変換できるが、複数になると','で区切られているので型変換できないことによるエラーだと思われます。
|
4
4
|
|
5
|
-
SQL Server 2016以降なら、```STRING_SPLIT()```と```FOR XML PATH('')```の組み合わせでSQLのみでも何とかでき
|
5
|
+
SQL Server 2016以降なら、```STRING_SPLIT()```と```FOR XML PATH('')```の組み合わせでSQLのみでも何とかできますが、そもそもオプション値を1つのカラムに','区切りで格納しているのですから、それをSQL上でマスターで変換しようとするのは非効率です。
|
6
6
|
|
7
7
|
SQLでの取得時に変換ではなく、データ取得後にphp側で変換したほうが良いと思います。
|
1
推敲
answer
CHANGED
@@ -2,6 +2,6 @@
|
|
2
2
|
|
3
3
|
上記エラーはSQL上で暗黙の型変換が行われ、オプションが一つのみ選択の場合は変換できるが、複数になると','で区切られているので型変換できないことによるエラーだと思われます。
|
4
4
|
|
5
|
-
SQL Server 2016以降なら、```STRING_SPLIT()```と```FOR XML PATH('')```の組み合わせでSQLのみでも何とかできるかもしれませんが、そもそもオプション値を1つのカラムに','区切りで格納しているのですから、それをマスターで変換しようとするのは非効率です。
|
5
|
+
SQL Server 2016以降なら、```STRING_SPLIT()```と```FOR XML PATH('')```の組み合わせでSQLのみでも何とかできるかもしれませんが、そもそもオプション値を1つのカラムに','区切りで格納しているのですから、それをSQL上でマスターで変換しようとするのは非効率です。
|
6
6
|
|
7
7
|
SQLでの取得時に変換ではなく、データ取得後にphp側で変換したほうが良いと思います。
|