Pregunta

Ok, estoy tratando de hacer una vista indizada que esté en contra de una tabla simple que almacene los resultados de lo que la gente piensa que es bueno / malo para una publicación. Estos son los resultados de un pulgar hacia arriba / pulgar hacia abajo, votar en las publicaciones.

Así que aquí está mi tabla falsa pseduo: -

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

Por lo tanto, un usuario solo puede tener un voto por publicación. Es un 1 (útil) o 0 (inútil) & Lt; - no estoy seguro de una mejor manera de manejar eso, si hay una mejor manera.

Ok. Lo que intento hacer es obtener una vista similar a la siguiente.

Útil IDENTIDAD INT. POSTERIOR (1,1) NO CLAVE PRIMARIA NULA,

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

Y finalmente, tendré que hacer que sea esquemable para poder agregar un índice en el PK y luego un índice en el PostId.

No tengo idea sobre el sql para hacer la vista. ¿Alguna sugerencia?

Saludos :)

¿Fue útil?

Solución

Pensamientos:

  • No puede usar COUNT (*) en una vista indizada
  • No puede agregar campos de bits

Existen otras limitaciones de las vistas indexadas

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

Editar: Se eliminó el campo Identidad, que se agregó accidentalmente a la pregunta / publicación original.

Editar 2 (gbn): Olvidé que cualquier agregado en una vista indizada también necesita un COUNT_BIG (*). Entonces, simplemente agregue uno como una columna ficticia. He probado esto.

  

Si la definición de vista usa un   función agregada, la lista SELECT   también debe incluir COUNT_BIG (*).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top