zoukankan      html  css  js  c++  java
  • 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中的对象一样,这里也更新一次就大功告成了。
  • 相关阅读:
    【转帖】电阻电容的封装
    FT2232H的MCU Host Bus Emulation 模式
    google cpp style guide
    CY7C131 BUSY信号线的接法
    有关沟通的常识
    关于for和foreach,兼顾效率与安全
    绩效面谈中处理分歧的小窍门
    SQL 合并列值和拆分列值
    如何保护.net中的dll文件(防止破解、反编译dll)(转)
    .NET框架图解之五:System.Reflection
  • 原文地址:https://www.cnblogs.com/EleMMent/p/10232664.html
Copyright © 2011-2022 走看看