Domanda

Ok, sto cercando di creare una vista indicizzata che si trova su una semplice tabella che memorizza i risultati di ciò che la gente pensa sia buono / cattivo per un post. Questo è il risultato di un pollice in su / di un pollice in giù, votando sui post.

Quindi ecco il mio falso tavolo pseduo: -

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

Quindi un utente può avere un solo voto per post. È 1 (utile) o 0 (inutile) & Lt; - non sono sicuro di un modo migliore per gestirlo, se esiste un modo migliore.

Ok. Quello che sto cercando di fare è ottenere una vista simile alla seguente.

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)

E infine, dovrò renderlo schemabindable in modo da poter aggiungere un indice sul PK e quindi un indice sul PostId.

Non ho idea di sql per rendere la vista. Qualche suggerimento?

Saluti :)

È stato utile?

Soluzione

Pensieri:

  • Non puoi utilizzare COUNT (*) in una vista indicizzata
  • Non è possibile aggregare campi di bit

Esistono altre limitazioni delle visualizzazioni indicizzate

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

Modifica: Rimosso il campo Identità, che è stato accidentalmente aggiunto alla domanda / al post originale.

Modifica 2 (gbn): Ho dimenticato che qualsiasi aggregato in una vista indicizzata anche necessita di COUNT_BIG (*). Quindi, basta aggiungerne uno come colonna fittizia. Ho provato questo.

  

Se la definizione della vista utilizza un   funzione aggregata, l'elenco SELEZIONA   deve includere anche COUNT_BIG (*).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top