一个分类统计的问题,有点复杂
现有表 t_就餐记录
字段如下:
姓名 就餐日期 饭店名称 id(自增列)
张三 2007-01-01 百福楼 1
李四 2007-01-01 百福楼 2
张三 2007-05-01 梅园 3
刘德华 2007-05-01 梅园 4
刘德华 2007-06-01 幼儿园 5
张三 2007-06-01 幼儿园 6
周润发 2007-06-01 幼儿园 7
想统计出来,在一起吃过两次饭以上的人员(两人,或两人以上)
统计出来的格式大概是这个样式
就餐日期 饭店名称 吃饭人员
2007-05-01 梅园 刘德华,张三
2007-06-01 幼儿园 刘德华,张三
或者其他格式也可以,只要能看出是是一起吃过两次饭以上的人员就可以了
先谢谢了
------解决方案--------------------create table t_就餐记录(姓名 varchar(20),就餐日期 datetime ,饭店名称 varchar(50) , id int)
insert t_就餐记录
select '张三 ', '2007-01-01 ', '百福楼 ', 1
union select '李四 ', '2007-01-01 ', '百福楼 ', 2
union select '张三 ', '2007-05-01 ', '梅园 ', 3
union select '刘德华 ', '2007-05-01 ', '梅园 ', 4
union select '刘德华 ', '2007-06-01 ', '幼儿园 ', 5
union select '张三 ', '2007-06-01 ', '幼儿园 ', 6
union select '周润发 ', '2007-06-01 ', '幼儿园 ', 7
go
---用函数
create function f(@dt datetime,@fn varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str= ' '
select @str=@str+ ', '+姓名 from t_就餐记录 where 就餐日期=@dt and 饭店名称=@fn
set @str=stuff(@str,1,1, ' ')
return @str
end
go
select 就餐日期,饭店名称,吃饭人员=dbo.f(就餐日期,饭店名称)
from t_就餐记录
group by 就餐日期,饭店名称
drop table t_就餐记录
drop function dbo.f
/* 结果
就餐日期 饭店名称 吃饭人员
------------------------------------------------------ -------------------------------------------------- ----------------------------------------------------------------------------------------------------------------
2007-01-01 00:00:00.000 百福楼 李四,张三
2007-05-01 00:00:00.000 梅园 刘德华,张三
2007-06-01 00:00:00.000 幼儿园 刘德华,张三,周润发
(3 row(s) affected)
*/
------解决方案--------------------学习!
------解决方案--------------------create table test(姓名 varchar(20),就餐日期 varchar(20),饭店名称 varchar(20),id int)
insert into test select '张三 ', '2007-01-01 ', '百福楼 ',1
insert into test select '李四 ', '2007-01-01 ', '百福楼 ',2
insert into test select '张三 ', '2007-05-01 ', '梅园 ',3
insert into test select '刘德华 ', '2007-05-01 ', '梅园 ',4
insert into test select '刘德华 ', '2007-06-01 ', '幼儿园 ',5