Wenn ich "SELECT * FROM table" durchführe, erhalte ich folgende Ergebnisse:
1 item1 data1
2 item1 data2
3 item2 data3
4 item3 data4
Wie Sie sehen können, gibt es Dup-Datensätze aus Spalte2 (Element1 wird gelöscht). Wie könnte ich also ein solches Ergebnis erzielen:
1 item1 data1
2 item2 data3
3 item3 data4
Vom Duplikat wird nur ein Datensatz zusammen mit den übrigen eindeutigen Datensätzen zurückgegeben.
Wenn Sie nur Duplikate entfernen müssen, verwenden Sie
DISTINCT
.GROUP BY
sollte verwendet werden, um Aggregatoperatoren auf jede Gruppe anzuwendenGROUP BY v DISTINCT
quelle
Es hängt davon ab, welche Rown Sie für jeden einzelnen Artikel zurückgeben möchten. Ihre Daten scheinen den minimalen Datenwert anzugeben, also in diesem Fall für SQL Server.
quelle
Es gibt 4 Methoden, die Sie verwenden können:
Betrachten Sie das folgende Beispiel
TABLE
mit Testdaten:Option 1: SELECT DISTINCT
Dies ist der einfachste und direkteste, aber auch der begrenzteste Weg:
Option 2: GRUPPE NACH
Gruppierung können Sie aggregierte Daten schreiben, die
min(id)
,max(id)
,count(*)
, etc:Option 3: Unterabfrage
Mithilfe einer Unterabfrage können Sie zuerst die zu ignorierenden doppelten Zeilen identifizieren und sie dann in der äußeren Abfrage mit dem
WHERE NOT IN (subquery)
Konstrukt herausfiltern :Option 4: Allgemeiner Tabellenausdruck mit ROW_NUMBER ()
Wählen Sie im Common Table Expression (CTE) die Option ROW_NUMBER () aus, die nach Gruppenspalten unterteilt und in der gewünschten Reihenfolge sortiert ist. Wählen Sie dann nur die Datensätze aus, die Folgendes haben
ROW_NUMBER() = 1
:quelle
Verwenden Sie einfach den inneren Join, da das Gruppieren nach nicht mit mehreren Spalten funktioniert, die besagen, dass sie in keiner der Aggregatfunktionen enthalten sind.
quelle
Ich finde, wenn ich DISTINCT aus irgendeinem Grund nicht verwenden kann, funktioniert GROUP BY.
quelle
Um alle Spalten in Ihrem Ergebnis zu erhalten, müssen Sie Folgendes platzieren:
Es wird a als erste Spalte platziert und der Rest besteht aus ALLEN Spalten in derselben Reihenfolge wie Ihre Definition. Dies ist, Spalte a wird wiederholt.
quelle
select distinct * from ...
Wählen Sie Eff_st aus (wählen Sie EFF_ST, ROW_NUMBER () über (PARTITION BY eff_st) XYZ - aus ABC.CODE_DIM
) wobei XYZ = 1 Auftrag von EFF_ST nur die ersten 5 Zeilen abruft
quelle