COUNT_BIGが2つあるインデックス付きビューを作成するには、ヘルプが必要です
-
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票しか投票できません。それは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(*)も含める必要があります。
所属していません StackOverflow