Sql 需要一些帮助以2 COUNT#u BIG';s

Sql 需要一些帮助以2 COUNT#u BIG';s,sql,tsql,subquery,indexed-view,Sql,Tsql,Subquery,Indexed View,好的,我正在尝试创建一个索引视图,它与一个简单的表相对应,该表存储人们认为对一篇文章有利/不利的结果。这是对帖子投票的结果 这是我的PSEDOO假表:- HelpfulPostId INT IDENTITY(1,1) NOT NULL PRIMARY KEY, PostId INT NOT NULL, IsHelpful BIT NOT NULL, UserId INT NOT NULL 因此,一个用户只能在每篇文章中投一票。这是一个1(有用)或0(无用)的想法: 不能在索引视图中使用计数(

好的,我正在尝试创建一个索引视图,它与一个简单的表相对应,该表存储人们认为对一篇文章有利/不利的结果。这是对帖子投票的结果

这是我的PSEDOO假表:-

HelpfulPostId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
PostId INT NOT NULL,
IsHelpful BIT NOT NULL,
UserId INT NOT NULL
因此,一个用户只能在每篇文章中投一票。这是一个1(有用)或0(无用)的想法:

  • 不能在索引视图中使用计数(*)
  • 不能聚合位字段
还有其他的

编辑: 删除了身份字段,该字段意外添加到原始问题/帖子中

编辑2(gbn): 我忘记了索引视图中的任何聚合也需要一个COUNT\u BIG(*)。因此,只需添加一个作为伪列。我已经测试过了

如果视图定义使用 聚合函数,选择列表 还必须包括COUNT_BIG(*)


嗯。。这是行不通的:(它怎么知道IsHelpfulCount的计数是多少?)这就是我需要定义的,在这个视图中:(这可以是子查询吗?稍加调整,现在就好了。我不得不删除标识字段(结果我意外地发布了它..这在我进行聚合时是不可能的:P)。我用2x子查询(进行计数)检查了快速选择,这一切都很好:)我很幸运我使用了1和0..所以求和会起作用:):(当我尝试为该视图编制索引时,它不起作用。说我需要一个count\u BIG(*)吗?…但是当我在select语句中添加以下内容时,它现在起作用了(我可以添加一个唯一的聚集索引)。=>count\u BIG(*)作为TotalCountcheers。确认也很有效:)cheers配合完成此操作。当最大行数受int主键限制时,如何计算大行数?我这样做是因为索引视图只有在尝试执行计数字段时才像计数大。
PostId INT NOT NULL,
IsHelpfulCount COUNT_BIG (WHERE IsHelpful = 1)
IsNotHelpfulCount COUNT_BIG (WHERE IsHelpful = 0)
CREATE VIEW dbo.Example
WITH SCHEMABINDING
AS
SELECT
    PostId,
    SUM(CAST(IsHelpful AS bigint)) AS IsHelpfulCount,
    SUM(CAST(1-IsHelpful AS bigint)) AS IsNotHelpfulCount,
    COUNT_BIG(*) AS Dummy   --Used to satisfy requirement
FROM
    dbo.bob
GROUP BY
    PostId
GO
CREATE UNIQUE CLUSTERED INDEX IXC_Test ON dbo.Example (PostId)
GO