0

我正在使用 SQL Server,我在其中设计了一个视图来汇总两个表的结果,并且我希望输出是带有结果的单个表。我的查询简化是这样的:

SELECT SUM(col1), col2, col3
FROM Table1
GROUP BY col2, col3

这给了我想要的数据,但是在更新我的 EDM 时,视图被排除在外,因为“无法推断出主键”。

通过一些研究,我修改了查询以欺骗 id 列,如下所示:

SELECT ROW_NUMBER() OVER (ORDER BY col2) AS 'ID', SUM(col1), col2, col3
FROM Table1
GROUP BY col2, col3

这种查询给了我一组很好的增加的 id。但是,当我尝试更新我的模型时,它仍然排除了我的视图,因为它无法推断出主键。我们如何使用聚合记录并将它们与 Linq-to-Entities 连接的视图?

4

2 回答 2

1

正如评论中已经讨论的那样,您可以尝试添加MAX(id) as id到视图中。根据您的反馈,这将变为:

SELECT ISNULL(MAX(id), 0) as ID, 
       SUM(col1), 
       col2, 
       col3 
FROM   Table1 
GROUP BY col2, col3

另一种选择是尝试在视图上创建索引:

CREATE UNIQUE CLUSTERED INDEX idx_view1 ON dbo.View1(id)
于 2013-06-19T10:04:50.547 回答
1

我使用此代码更改视图

ISNULL(ROW_NUMBER() OVER(ORDER BY ActionDate DESC), -1) AS RowID 

我在多关系视图/表查询中使用此子句

ROW_NUMBER 永远不会给出空值,因为它从未见过 -1

于 2013-11-14T10:22:26.300 回答