Hai bisogno di aiuto per creare una vista indicizzata con 2 COUNT_BIG
-
06-07-2019 - |
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 :)
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 (*).