需要一些帮助来制作包含 2 个 COUNT_BIG 的索引视图
-
06-07-2019 - |
题
好的,我正在尝试创建一个索引视图,该视图针对一个简单的表,该表存储人们认为对帖子有利/不利的结果。这是对帖子投票的结果。
这是我的伪表:-
HelpfulPostId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
PostId INT NOT NULL,
IsHelpful BIT NOT NULL,
UserId INT NOT NULL
因此,一个用户对每个帖子只能投一票。它要么是 1(有帮助),要么是 0(无帮助)<-- 不确定是否有更好的方法来处理这个问题,如果有更好的方法的话。
好的。我想做的是获得如下所示的视图。
HelpfulPostId INT IDENTITY(1,1) NOT NULL 主键,
PostId INT NOT NULL,
IsHelpfulCount COUNT_BIG (WHERE IsHelpful = 1)
IsNotHelpfulCount COUNT_BIG (WHERE IsHelpful = 0)
最后,我需要使其可模式绑定,以便我可以在 PK 上添加一个索引,然后在 PostId 上添加一个索引。
我不知道创建视图的sql。有什么建议么?
干杯:)
解决方案
想法:
- 您不能在索引视图中使用 COUNT(*)
- 您无法聚合位字段
还有其他的 索引视图的局限性
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
编辑:删除了“身份”字段,该字段被意外添加到原始问题/帖子中。
编辑2(GBN):我忘记了索引视图中的任何聚合 还 需要 COUNT_BIG(*)。因此,只需添加一个作为虚拟列即可。我已经测试过这个。
如果视图定义使用汇总函数,则选择列表还必须包括count_big(*)。
不隶属于 StackOverflow