请教一个LINQ语句的实现
我有一张表,里面存放某地区所有的就诊记录
任何一个人,去任何一家医院就诊一次,形成一条记录
我想统计一段时间以内,同一人 在 同一医院 就诊多次 的情况下,该医院多次就诊的总人次数
以前在SSMS下,是分两步来查,语句是
select 医院号,人员编号,count(人员编号)as'次数' into 临时表 from 表
group by 医院号,人员编号
having count(人员编号)>1
--先把同一人在一家医院就诊1次以上的查出来,放到临时表里面
select 医院号,sum(次数)as '人次数' from 临时表
group by 医院号
查询结果应该是:
医院名 多次诊疗总人次
人民医院 100
中医院 50
……
现在想做一个LINQ的查询工具,对如何用group by进行多个属性分组,并统计各组次数不太了解,请高手指点一下
------最佳解决方案-------------------- 看看这个:
var n = from u in 表
group u by new { Name = u.医院号, UName = u.人员编号 } into g
where g.Count() > 1 // 按医院号+人员编号分组计数,剔除总次数为1的
from u2 in g
group u2 by u2.Name; // 按医院号统计
// 输出统计结果
foreach (var item in n)
{
Trace.WriteLine(string.Format("{0}\t{1}", item.Key, item.Count()));
}
------其他解决方案-------------------- var query = 表.GroupBy(x => new { x.医院号, x.人员编号 }).Select(x => new { x.Key.医院号, x.Key.人员编号, Count = x.Count() }); //按照医院-人的统计次数
var query = 表.GroupBy(x => x.医院号).Select(x => new { 医院号 = x.Key, Count = x.Count() }); //按照医院的统计次数
var query = 表.Select(x => new { x.医院号, x.人员编号 }).Distinct().GroupBy(x => x.医院号).Select(x => new { 医院号 = x.Key, Count = x.Count() }); //按照医院的统计次数,每个人多次算1次。
------其他解决方案-------------------- 引用: 看看这个:
C# code
var n = from u in 表
group u by new { Name = u.医院号, UName = u.人员编号 } into g
where g.Count() > 1 // 按医院号+人员编号分组计数,剔除总次数为1的
from u2 in g
group u2 b……
可用,学习了,非常感谢