können sagen, ich habe Tabelle mit ID int, VALUE string:effektivste Weg, Wert zu erhalten, wenn select count (*) = 1 mit Gruppierung
ID | VALUE
1 abc
2 abc
3 def
4 abc
5 abc
6 abc
Wenn ich wählen Wert tun, count (*) Gruppe Wert soll ich
VALUE | COUNT
abc 5
def 1
nun den schwierigen Teil erhalten, wenn es Zahl == 1 ich diese ID aus dem ersten Tabelle erhalten muß, ist. Soll ich CTE verwenden? Ergebnismenge erstellen, wo ich ID String == null hinzufügen und aktualisieren b.ID = a.ID wo count == 1?
Oder gibt es einen anderen einfacheren Weg?
EDIT:
Ich möchte wie diese Ergebnistabelle haben:
ID VALUE count
null abc 5
3 def 1
Das ist viel besser als meine hässliche Union. Ich applaudiere Ihnen, mein Herr. Ist der Fall bei großen Abfragen ein potenzieller Leistungseinbruch? –
@CrisCarew Ich habe die Leistung im Vergleich zu Ihrem Vorschlag überprüft, und dies ist besser. Sie sehen, ich treffe nur einmal den Tisch. SQL Server muss das Zählaggregat für jede Gruppe durchführen. Wenn Sie das Min- und Max-Aggregat entlang des Weges ausführen, wirkt sich dies nicht zu sehr auf die Leistung aus. Die case-Anweisung wird erst angewendet, wenn alle Aggregate einmal pro Gruppe ausgeführt wurden. –
Ich dachte mir so viel. Kühle Bohnen. Ich habe etwas gelernt, indem ich heute etwas beantwortet habe. –