COUNT_BIGが2つあるインデックス付きビューを作成するには、ヘルプが必要です

StackOverflow https://stackoverflow.com/questions/1025507

質問

わかりました、私は人々が投稿にとって良い/悪いと思う結果を保存する単純なテーブルに対するインデックス付きビューを作成しようとしています。これは、投稿に対する賛成/反対の投票の結果です。

だからここに私の偽の偽のテーブルがあります:-

HelpfulPostId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
PostId INT NOT NULL,
IsHelpful BIT NOT NULL,
UserId INT NOT NULL

したがって、ユーザーは投稿ごとに1票しか投票できません。それは1(役に立つ)または0(役に立たない)のいずれかです<!> lt;-より良い方法がある場合、それを処理するより良い方法がわかりません。

わかりました。 私がやろうとしているのは、次のようなビューを取得することです。

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

編集: 元の質問/投稿に誤って追加された[ID]フィールドを削除しました。

編集2(gbn): インデックス付きビューの集計には、 にもCOUNT_BIG(*)が必要であることを忘れていました。そのため、単純にダミーの列として追加します。これをテストしました。

  

ビュー定義が使用する場合   集約関数、SELECTリスト   COUNT_BIG(*)も含める必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top