简体   繁体   English

在SQL中的联接表中获取字段作为字符串

[英]get field as string in join table in sql

I have following table structure 我有以下表格结构

Table1 表格1

+-----+---------+
| id  | user_id |
+-----+---------+
| 1   | 123     |
| 2   | 456     |
+-----+---------+

Table2 表2

+-----+----------+------+------+
| id  | user_id  | data | name |
+-----+----------+------+------+
| 1   | 123      | abc  | Tom  |
| 2   | 123      | xyz  | Jon  |
| 3   | 456      | pqr  | Johny|
+-----+----------+------+------+

I want to list count of data in Table2 for each user along with the data column joined as a string next to count column in the resultant table. 我想列出每个用户在Table2中的数据计数以及作为结果表中count列旁边的字符串连接的data列。

My SQL query is like 我的SQL查询就像

SELECT t1.user_id, count(t2.id) as c
FROM Table1 t1
INNER JOIN Table2 t2 on t2.user_id = t1.user_id

This lists data as 这将数据列出为

+---------+------+
| user_id | c    |
+---------+------+
| 123     | 2    |
| 456     | 1    |
+---------+------+

But I want data like 但是我想要像

+---------+------+-------------+
| user_id | c    | datas       |
+---------+------+-------------+
| 123     | 2    | abc, xyz    |
| 456     | 1    | pqr         |
+---------+------+-------------+

How could I select the data joined by comma? 如何选择用逗号连接的数据?

use GROUP_CONCAT 使用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

I think following idea will match you. 我认为以下想法将适合您。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM