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