Wie eine SQL Server-indizierte Sicht, dass Aggregate unterschiedliche Werte formulieren?
-
02-10-2019 - |
Frage
Ich habe ein Schema, das Tabellen wie folgt aus (Pseudo-Schema) enthält:
TABLE ItemCollection {
ItemCollectionId
...etc...
}
TABLE Item {
ItemId,
ItemCollectionId,
ContributorId
}
Ich brauche die Anzahl der verschiedenen Mitwirkenden pro ItemCollectionId aggregieren. Dies ist möglich, mit einer Abfrage wie:
SELECT ItemCollectionId, COUNT(DISTINCT ContributorId) FROM Item
GROUP BY ItemCollectionId
Ich möchte weiter im Voraus berechnen diese Aggregation eine indizierte (materialisiert)-Ansicht. Die deutliche verhindert einen Index auf dieser Ansicht angeordnet wird. Gibt es eine Möglichkeit, dies zu formulieren, die nicht verletzen, werden von SQL Server indizierten Sicht Einschränkungen?
Lösung
Nicht möglich, scheinbar.
Andere Tipps
SELECT
ItemCollectionId,
COUNT(DISTINCT ContributorId),
COUNT_BIG(*) AS DummyColumn
FROM Item
GROUP BY ItemCollectionId
Ein Aggregat erfordert COUNT_BIG (*) wie erwähnt in MSDN .
Das sagt auch „kein DISTINCT“ und ich bin mir nicht sicher (es nie versucht, sorry), wenn dies gilt Verwendung des in einem Aggregat (wie Sie) oder SELECT DISTINCT...