[英]get field as string in join table in sql
我有以下表格结构
表格1
+-----+---------+
| id | user_id |
+-----+---------+
| 1 | 123 |
| 2 | 456 |
+-----+---------+
表2
+-----+----------+------+------+
| id | user_id | data | name |
+-----+----------+------+------+
| 1 | 123 | abc | Tom |
| 2 | 123 | xyz | Jon |
| 3 | 456 | pqr | Johny|
+-----+----------+------+------+
我想列出每个用户在Table2中的数据计数以及作为结果表中count列旁边的字符串连接的data列。
我的SQL查询就像
SELECT t1.user_id, count(t2.id) as c
FROM Table1 t1
INNER JOIN Table2 t2 on t2.user_id = t1.user_id
这将数据列出为
+---------+------+
| user_id | c |
+---------+------+
| 123 | 2 |
| 456 | 1 |
+---------+------+
但是我想要像
+---------+------+-------------+
| user_id | c | datas |
+---------+------+-------------+
| 123 | 2 | abc, xyz |
| 456 | 1 | pqr |
+---------+------+-------------+
如何选择用逗号连接的数据?
使用GROUP_CONCAT
SELECT t1.user_id, GROUP_CONCAT(t2.data SEPARATOR ','),count(t2.id) as c
FROM Table1 t1
INNER JOIN Table2 t2 on t2.user_id = t1.user_id
group by t1.user_id
我认为以下想法将适合您。
SELECT user_id
,STUFF((SELECT ', ' + CAST(datas AS VARCHAR(10)) [text()]
FROM Table2
WHERE user_id = t.user_id
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM Table2 t
GROUP BY user_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.