2009-06-22 9 views
0

私は、人々が投稿の良い/悪いと思う結果を格納する単純なテーブルに対するインデックス付きのビューを作成しようとしています。これは、サムズアップ/サムズダウン、投稿に投票した結果です。2 COUNT_BIGのインデックス付きビューを作成するにはいくつかの助けが必要です

だからここに私のpseduo偽のテーブルです: -

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

したがって、ユーザーが唯一のポストごとに1票を持つことができます。それは良い方法があれば、それを扱うためのよりよい方法の確かでない1(有用)か0(役に立たない)<のどちらかです。

私がしようとしていることは、次のようなビューを得ることです。

HelpfulPostId INT IDENTITY(1,1)NOT NULL PRIMARY KEY、

PostId INT NOT NULL, 
IsHelpfulCount COUNT_BIG (WHERE IsHelpful = 1) 
IsNotHelpfulCount COUNT_BIG (WHERE IsHelpful = 0) 

そして最後に、私はそれは私がPKして、インデックスにインデックスを追加することができますschemabindableようにする必要がありますPostIdに

私はビューを作成するSQLについて考えていません。助言がありますか?

乾杯:)

+0

最大行がint主キーによって制限されている場合、どのようにcount_bigすることができますか? –

+0

COUNTフィールドを試してみると、インデックス付きビューはCOUNT_BIGのようにしか見えないので、これを行いました。 –

答えて

2

思考:あなたはありますが、集計ビットフィールド

することはできません

  • インデックス付きビューでCOUNT(*)を使用することはできません

    • その他limitations of indexed views

      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(*)を含める必要があります。

  • +0

    ええと、それはうまくいかないでしょう:(それは、どのようにIsHelpfulCountのカウントが何であるかを知っていますか?このビューで定義する必要があります:(サブクエリでもかまいませんか) –

    +0

    IsHelpfulCountは集約を意味しますか?あなたはそれを試しました – gbn

    +0

    ちょっと微調整して、それは今良いです。私はインデントフィールドをドロップしなければなりませんでした(私は結果として..それは結果として..投稿しました私は集計を行っているときは不可能です:P)。 2つのサブクエリ(カウントを行う)とそれはすべての良い:)私は1&0を使用しているので、私は幸運だ:SUMは動作するように:) –

    関連する問題