我正在使用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连接?
答案 0 :(得分: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)
答案 1 :(得分:0)
我使用此代码更改视图
ISNULL(ROW_NUMBER() OVER(ORDER BY ActionDate DESC), -1) AS RowID
我在多关系视图/表查询中使用此子句
ROW_NUMBER永远不会给出null值,因为它从未见过-1