Grundsätzlich versuche ich eine deutliche Anzahl innerhalb dieses gewürfelten Ergebnisses zu bekommen. Aber unglücklicherweise können Sie nicht zählen (distinct (Field)) mit Cube und Rollup (as stated here)SQL Server Getting Distinct Anzahl mit "Gruppieren nach ... Mit Cube"
Hier ist, wie die Daten aussieht. (Dies ist nur ein einfaches Beispiel, das ich Duplikate tun erwarten in der Data)
Category1 Category2 ItemId
a b 1
a b 1
a a 1
a a 2
a c 1
a b 2
a b 3
a c 2
a a 1
a a 3
a c 4
Hier ist, was ich tun möchte, aber es funktioniert nicht.
SELECT
Category1,
Category2,
Count(Distinct(ItemId))
FROM ItemList IL
GROUP BY
Category1,
Category2
WITH CUBE
Ich weiß, dass ich so ein Unter wählen tun können, um die Ergebnisse zu erhalten, ich will:
SELECT
*,
(SELECT
Count(Distinct(ItemId))
FROM ItemList IL2
WHERE
(Q1.Category1 IS NULL OR Q1.Category1 IS NOT NULL AND Q1.Category1 = IL2.Category1)
AND
(Q1.Category2 IS NULL OR Q1.Category2 IS NOT NULL AND Q1.Category2 = IL2.Category2))
AS DistinctCountOfItems
FROM (SELECT
Category1,
Category2
FROM ItemList IL
GROUP BY
Category1,
Category2
WITH CUBE) Q1
Aber das läuft langsam, wenn die Ergebnismenge auf Grund der Unterauswahl groß ist. Gibt es einen anderen Weg, um eine eindeutige Anzahl von einem gewürfelten Ergebnis zu erhalten?
Dies ist das Ergebnis, das ich
Category1 Category2 DistinctCountOfItems
a a 3
a b 3
a c 3
a NULL 4
NULL NULL 4
NULL a 3
NULL b 3
NULL c 3
@ chezy525 .... Netter Ansatz ... Ich mag es. Es ist definitiv effizienter als die Gewerkschaften. immer noch etwas chaotischer als ich mag, aber es funktioniert. –
Danke! Das war eine lustige Abwechslung für meinen Freitag! Ich denke, jede Lösung wird "unordentlicher als es sein sollte" ohne die deutliche aggregierte Unterstützung ... – chezy525
Ihre letzte Option ist die gleiche, die ich schließlich mit, es ist die eleganteste, und es trifft die Tabellen am wenigsten mal um das Ergebnis zurück zu bekommen. Soweit ich aus meinen Ausführungsplänen ersehen kann, würde ein Index für Kategorie1, Kategorie2, ElementID die Abfrage so schnell machen, wie sie würde. – cairnz