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?

È stato utile?

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...

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