Come formulare una vista indicizzata SQL Server che consente di aggregare valori distinti?
-
02-10-2019 - |
Domanda
Non ho uno schema che comprende tavoli nel modo seguente (schema pseudo):
TABLE ItemCollection {
ItemCollectionId
...etc...
}
TABLE Item {
ItemId,
ItemCollectionId,
ContributorId
}
devo aggregare il numero di contribuenti distinti per ItemCollectionId. Questo è possibile con una query del tipo:
SELECT ItemCollectionId, COUNT(DISTINCT ContributorId) FROM Item
GROUP BY ItemCollectionId
I più voglia di pre-calcolare questo aggregazione utilizzando un (materializzata) vista indicizzata. Le impedisce DISTINCT un indice di essere immessi in questa vista. Esiste un modo di riformulare questa, che non violerà vista vincoli indicizzate di SQL Server?
Soluzione
Non è possibile, a quanto pare.
Altri suggerimenti
SELECT
ItemCollectionId,
COUNT(DISTINCT ContributorId),
COUNT_BIG(*) AS DummyColumn
FROM Item
GROUP BY ItemCollectionId
Un aggregato richiederà COUNT_BIG (*) come menzionato in MSDN .
Questo dice anche "no DISTINCT" e non sono sicuro (mai provato, sorry) se questo vale per il suo impiego in un aggregato (come si deve), o SELECT DISTINCT...