Question

D'accord, j'essaie de créer une vue indexée par rapport à un simple tableau qui stocke les résultats de ce que les internautes pensent être bon ou mauvais pour un message. C’est le résultat d’un vote positif / négatif,

.

Alors, voici ma fausse table pseduo: -

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

Ainsi, un utilisateur ne peut avoir qu'un seul vote par message. C’est soit un 1 (utile), soit un 0 (inutile) & Lt; - n’est pas sûr d’un meilleur moyen de gérer cela, s’il existe un meilleur moyen.

Ok. Ce que j’essaie de faire, c’est d’obtenir une vue semblable à celle-ci.

HelpfulPostId INT IDENTITY (1,1) NON NUL PRIMARY KEY,

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

Et enfin, je devrai le rendre schemabindable pour pouvoir ajouter un index sur le PK, puis un index sur le PostId.

Je n’ai aucune idée du SQL pour rendre la vue. Des suggestions?

Cheers:)

Était-ce utile?

La solution

Pensées:

  • Vous ne pouvez pas utiliser COUNT (*) dans une vue indexée
  • Vous ne pouvez pas agréger les champs de bits

Il existe d'autres limitations des vues indexées

.
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

Modifier: Suppression du champ Identité, qui avait été ajouté accidentellement à la question / au message d'origine.

Modifier 2 (gbn): J'ai oublié que tout agrégat dans une vue indexée aussi nécessite un COUNT_BIG (*). Alors, ajoutez-en simplement une colonne factice. J'ai testé cela.

  

Si la définition de la vue utilise un   fonction d'agrégat, la liste SELECT   doit également inclure COUNT_BIG (*).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top