Mit SQL Server habe ich ...
ID SKU PRODUCT
=======================
1 FOO-23 Orange
2 BAR-23 Orange
3 FOO-24 Apple
4 FOO-25 Orange
Ich will
1 FOO-23 Orange
3 FOO-24 Apple
Diese Abfrage bringt mich nicht dorthin. Wie kann ich DISTINCT nur für eine Spalte auswählen?
SELECT
[ID],[SKU],[PRODUCT]
FROM [TestData]
WHERE ([PRODUCT] =
(SELECT DISTINCT [PRODUCT] FROM [TestData] WHERE ([SKU] LIKE 'FOO-%'))
ORDER BY [ID]
sql
sql-server
tsql
distinct
mmcglynn
quelle
quelle
Antworten:
Angenommen, Sie arbeiten mit SQL Server 2005 oder höher, können Sie einen CTE mit ROW_NUMBER () verwenden:
quelle
Die einfachste Lösung wäre, eine Unterabfrage zu verwenden, um die minimale ID zu finden, die Ihrer Abfrage entspricht. In der Unterabfrage verwenden Sie
GROUP BY
anstelle vonDISTINCT
:quelle
Versuche dies:
BEARBEITEN
Sobald das OP seine Samle-Ausgabe korrigiert hat (zuvor hatte es nur EINE Ergebniszeile, jetzt werden alle angezeigt), ist dies die richtige Abfrage:
quelle
quelle
Ich weiß, dass es vor über 6 Jahren gefragt wurde, aber Wissen ist immer noch Wissen. Dies ist eine andere Lösung als alle oben genannten, da ich sie unter SQL Server 2000 ausführen musste:
quelle
Hier ist eine Version, die im Grunde mit einigen anderen Antworten identisch ist, die Sie jedoch dank einiger Inline-Werte kopieren und in Ihr SQL Server Management Studio einfügen können, um sie zu testen (und ohne unerwünschte Tabellen zu generieren).
Ergebnis
Ich habe folgendes ignoriert ...
als einziger Teil des Autors fehlerhafter Code und nicht Teil der Frage. Es ist unwahrscheinlich, dass es für Leute, die hier suchen, hilfreich ist.
quelle
Versuche dies:
SELECT * FROM [TestData] WHERE Id IN(SELECT DISTINCT MIN(Id) FROM [TestData] GROUP BY Product)
quelle