数据库开窗函数count()over()可以实现你的需求,但是你的数据库有没有类似的开窗函数我就不知道的,一般来说oracle应该可以实现,sqlserver和mysql中mysql没有响应的开窗函数,要自己做,sqlserver中有类似的聚合开窗函数,但是count能不能用我不是很确定。
select count(*)over(partition by fsu_device_id) 重复次数,你的字段 from (你上面的select语句)
我写了一个最简单的,也就是在你的语句外面又套了一层,你可以试试能不能不套这一层,不过我没有环境没办法测试,所以就直接套了。
将这几个连接的表表示为表a,再写一个表b,与表a一样,查出fsu_device_id以及出现的次数,然后a与b连接,a表左连接b表,查出最终结果
大体思路就是这样,以下SQL我没有验证,如果有执行错误,自己稍作修改即可
SELECT a.fsu_device_id,b.times,a.device_id,a.device_name,a.model_name,a.mete_code,a.mete_name
FROM
(SELECT md.fsu_device_id,md.device_id,de.device_name,mm.model_name,ml.mete_code,ml.mete_name
FROM t_cfg_monitordevice md
INNER JOIN t_cfg_device de
ON md.device_id=de.device_id
INNER JOIN t_cfg_metemodel mm
ON de.device_model=mm.model_id
INNER JOIN t_cfg_metemodel_detail ml
ON mm.model_id=ml.model_id) a
left join
(SELECT md.fsu_device_id, count(*) times
FROM t_cfg_monitordevice md
INNER JOIN t_cfg_device de
ON md.device_id=de.device_id
INNER JOIN t_cfg_metemodel mm
ON de.device_model=mm.model_id
INNER JOIN t_cfg_metemodel_detail ml
ON mm.model_id=ml.model_id
group by md.fsu_device_id) b
on a.fsu_device_id = b.fsu_device_id
ORDER BY a.fsu_device_id ASC
select number,count(number) from database(database 是你的数据库)
group by number;