Ich habe mich gefragt, ob es eine Möglichkeit gibt, eine SELECT
Abfrage für jeden übereinstimmenden Wert in IN durchzuführen.
Beachten Sie, dass die folgende Tabelle 100 Datensätze für jeden der vom IN
Operator angegebenen Werte enthält. Ich möchte, dass für jede Übereinstimmung nur 50 zurückgegeben werden.
SELECT TOP (50) COLUMN
FROM TABLE
WHERE COLUMN IN (1,2,3)
Gibt es eine effiziente Möglichkeit, dies zu tun?
Die einzige Möglichkeit, die ich mir vorstellen kann, besteht darin, die Abfrage für jeden Wert auszuführen, der IN
viel zu langsam wäre, wenn man bedenkt, dass die tatsächliche Abfrage viele Spalten aus verschiedenen Tabellen abruft.
Antworten:
Eine Methode ist mit
CROSS APPLY
:Um zu vermeiden, dass zufällige Zeilen mit zurückgegeben werden
TOP
,ORDER BY
ist dies erforderlich, und die Reihenfolge nach Spalten sollte eindeutig sein. Ein Index mit einem zusammengesetzten SchlüsselID
undColumnName
ist in dieser Beispielabfrage aus Effizienzgründen hilfreich.quelle
Sie können dafür verwenden
ROW_NUMBER()
:quelle
SELECT * FROM...