从1个表中的1个ID中获取2个或更多数据

时间:2016-09-14 08:43:48

标签: mysql

我需要有关sql查询的帮助.. 抱歉,我对sql知之甚少,而且我对英语不好。

我有这样的sql表。

|  ID  |  Data  |
|  1   |  abc   |
|  1   |  def   |
|  1   |  ghi   |
|  2   |  jkl   |
|  2   |  mno   |
|  3   |  pqr   |
|  3   |  stq   |

我想要这样的结果

|  ID  |       Data      |
|  1   |  abc, def, ghi  |
|  2   |  jkl, mno       |
|  3   |  stq, def       |

或者像这样

|  ID  |  Data1 |  Data2 |  Data3 |
|  1   |  abc   |  def   |  ghi   |
|  2   |  jkl   |  mno   |
|  3   |  pqr   |  stq   |

我希望有人可以帮助我。感谢。

4 个答案:

答案 0 :(得分:2)

对于Sql server:

select id,
stuff((select ','+data from #temp t2 where t1.id=t2.id for xml path ('')),1,1,'') as val from #temp t1
group by id

for mysql:

SELECT id,GROUP_CONCAT(data)  
FROM table 
GROUP BY id; 

答案 1 :(得分:2)

尝试以下查询,它应该可以正常工作

select 
     t1.id,
     Data=STUFF((select ', '+t2.Data from test t2 where t1.id=t2.id for xml path('')),1,2,'')  
    from test t1
    group by t1.id

我在sql server

中尝试此查询

答案 2 :(得分:0)

对于mysql:

group_concat是你的朋友。

  

此函数返回带有连接非NULL的字符串结果   一组中的值。如果没有非NULL值,则返回NULL。

SELECT id, group_concat(data) as data from my_table group by id

这会在第一个样本中生成类型的结果。第二个样本输出更复杂,

答案 3 :(得分:0)

使用资料功能

DECLARE @tbl1 AS TABLE
 (
  Id INT,
  Data VARCHAR(50)
 )


 INSERT INTO @tbl1 VALUES(1,'abc')
 INSERT INTO @tbl1 VALUES(1,'def')
 INSERT INTO @tbl1 VALUES(1,'ghi')
 INSERT INTO @tbl1 VALUES(2,'jkl')
 INSERT INTO @tbl1 VALUES(2,'mno')
 INSERT INTO @tbl1 VALUES(3,'pqr')
 INSERT INTO @tbl1 VALUES(3,'stu')

 SELECT
    Id,
    (
        SELECT 
        STUFF
        ( 
            (
                SELECT 
                    ',' + Data 
                FROM @tbl1 B                             
                WHERE A.Id=B.Id                             
                FOR XML PATH('')
            ), 
            1, 1, ''
        )
    ) AS Data
FROM @tbl1 A
GROUP By A.Id