mysql分组查询后的合并,不知道mysql语句能不能办到

时间:2022-09-16 12:52:07
原表
date         name   status
201705    a         1
201705    b         1
201705    c         0
201706    a         1
201706    b         0
201706    c         1
我按date 和status分组查询后可以得到
date        name   status
201705   a,b        1
201705   c           0
201706   a,c        1
201706   b           0
我想得到下面的数据,mysql有语句能做到吗?
date         name1      name0
201705    a,b            c
201706    a,c            b        

6 个解决方案

#1


最后一步和你自己做的分组一个道理啊。

在你自己分组的基础上,你在group by的基础上,再加个条件status,然后name分成1,2,分别计算,计算得时候也多加一个status条件

#2


引用 1 楼 shoppo0505 的回复:
最后一步和你自己做的分组一个道理啊。

在你自己分组的基础上,你在group by的基础上,再加个条件status,然后name分成1,2,分别计算,计算得时候也多加一个status条件

大神,不是很懂,可以把sql语句写给我吗? mysql分组查询后的合并,不知道mysql语句能不能办到
麻烦你您了 mysql分组查询后的合并,不知道mysql语句能不能办到mysql分组查询后的合并,不知道mysql语句能不能办到mysql分组查询后的合并,不知道mysql语句能不能办到

#3


不知道mysql是否支持 for xml path , 如果不支持, 就要用循环语句

类似下面这样
DECLARE @str varchar(10)
SET @str=''
Select @str=@str+Field From Table Where .....

While .....
         Begin 

         End

#4


都得到上面的数据了,再case一下取max之类的就行了啊

#5




if object_id('tempdb..#Tmp_Data') is not null
drop table #Tmp_Data

CREATE TABLE #Tmp_Data (
             date int,
 name varchar(10),
 status int)

INSERT INTO #Tmp_Data
Select 201705,'a,b',1 union
Select 201705,'c',0 union
Select 201706,'a,c',1 union
Select 201706,'b',0 

Select date,
       max(case when status=1 then name else '' end) as name1,
   max(case when status=0 then name else '' end) as name0
From #Tmp_Data
Group By date



mysql分组查询后的合并,不知道mysql语句能不能办到

#6


引用 5 楼 appetizing_fish1 的回复:


if object_id('tempdb..#Tmp_Data') is not null
drop table #Tmp_Data

CREATE TABLE #Tmp_Data (
             date int,
 name varchar(10),
 status int)

INSERT INTO #Tmp_Data
Select 201705,'a,b',1 union
Select 201705,'c',0 union
Select 201706,'a,c',1 union
Select 201706,'b',0 

Select date,
       max(case when status=1 then name else '' end) as name1,
   max(case when status=0 then name else '' end) as name0
From #Tmp_Data
Group By date



mysql分组查询后的合并,不知道mysql语句能不能办到

十分感谢,谢谢大佬 mysql分组查询后的合并,不知道mysql语句能不能办到

#1


最后一步和你自己做的分组一个道理啊。

在你自己分组的基础上,你在group by的基础上,再加个条件status,然后name分成1,2,分别计算,计算得时候也多加一个status条件

#2


引用 1 楼 shoppo0505 的回复:
最后一步和你自己做的分组一个道理啊。

在你自己分组的基础上,你在group by的基础上,再加个条件status,然后name分成1,2,分别计算,计算得时候也多加一个status条件

大神,不是很懂,可以把sql语句写给我吗? mysql分组查询后的合并,不知道mysql语句能不能办到
麻烦你您了 mysql分组查询后的合并,不知道mysql语句能不能办到mysql分组查询后的合并,不知道mysql语句能不能办到mysql分组查询后的合并,不知道mysql语句能不能办到

#3


不知道mysql是否支持 for xml path , 如果不支持, 就要用循环语句

类似下面这样
DECLARE @str varchar(10)
SET @str=''
Select @str=@str+Field From Table Where .....

While .....
         Begin 

         End

#4


都得到上面的数据了,再case一下取max之类的就行了啊

#5




if object_id('tempdb..#Tmp_Data') is not null
drop table #Tmp_Data

CREATE TABLE #Tmp_Data (
             date int,
 name varchar(10),
 status int)

INSERT INTO #Tmp_Data
Select 201705,'a,b',1 union
Select 201705,'c',0 union
Select 201706,'a,c',1 union
Select 201706,'b',0 

Select date,
       max(case when status=1 then name else '' end) as name1,
   max(case when status=0 then name else '' end) as name0
From #Tmp_Data
Group By date



mysql分组查询后的合并,不知道mysql语句能不能办到

#6


引用 5 楼 appetizing_fish1 的回复:


if object_id('tempdb..#Tmp_Data') is not null
drop table #Tmp_Data

CREATE TABLE #Tmp_Data (
             date int,
 name varchar(10),
 status int)

INSERT INTO #Tmp_Data
Select 201705,'a,b',1 union
Select 201705,'c',0 union
Select 201706,'a,c',1 union
Select 201706,'b',0 

Select date,
       max(case when status=1 then name else '' end) as name1,
   max(case when status=0 then name else '' end) as name0
From #Tmp_Data
Group By date



mysql分组查询后的合并,不知道mysql语句能不能办到

十分感谢,谢谢大佬 mysql分组查询后的合并,不知道mysql语句能不能办到