sqlserver中檢視沒有主鍵值但是想進行分組計數查詢時該怎麼處理?
阿新 • • 發佈:2019-01-07
sqlser的view平時用的很多了,但是一直都是當做一個虛擬表格來使用。
最近碰到一個需求,要求把原有的資料進行分組查詢,同時還需要進行計數統計。
原有邏輯就是通過entity和view配合直接顯示在頁面上,在view裡沒有主鍵值,所以顯示新資料時總是達不到要求,
因此將對映表中的ID加入view裡,可是這樣sql裡就必要用講ID進行group by,那這樣就不可能實現計數統計了。
查資料後發現可以使用sql的系統函式row_number()來達到虛擬表裡有key值但是又不用再group by是加入影響顯示。
於是先修改試圖:
alter view vw_LogTimesas 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中的物件一樣,這裡也更新一次就大功告成了。