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

这是我的伪表:-

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(*)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top