sqlserver中视图没有主键值但是想进行分组计数查询时该怎么处理?

sqlser的view平时用的很多了,但是一直都是当做一个虚拟表格来使用。

最近碰到一个需求,要求把原有的数据进行分组查询,同时还需要进行计数统计。

原有逻辑就是通过entity和view配合直接显示在页面上,在view里没有主键值,所以显示新数据时总是达不到要求,

因此将映射表中的ID加入view里,可是这样sql里就必要用讲ID进行group by,那这样就不可能实现计数统计了。

查资料后发现可以使用sql的系统函数row_number()来达到虚拟表里有key值但是又不用再group by是加入影响显示。

于是先修改试图:

alter view vw_LogTimes
as
SELECT   ID=ROW_NUMBER() over(order by Memo),Action, Description, COUNT(1) AS times, MemberID, Memo
FROM      dbo.ActionLog
GROUP BY Action, Description, MemberID, Memo
go
ID=ROW_NUMBER() over(order by Memo)就是给view一个主键

然后修改entity的结构,但这里出现了一个问题,直接通过右键“从数据库更新数据模型”无法更新成功,entity中还是没有更新出ID这个字段,
于是我就先修改view,让它还是映射原表格的ID(varchar类型),然后右键更新,再去把view恢复到row_number,之后手动修改cs文件中ID的数据类型。
但编译后依然会出错,会提示xxxInfo.vw_LogTimes中ID的数据类型和xxxInfo.Store.
vw_LogTimes中ID的数据类型不符,后者依然还是int32,
因此打开模型浏览器,像更新edmx中的对象一样,这里也更新一次就大功告成了。

转载于:https://www.cnblogs.com/EleMMent/p/10232664.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值