Wie man zufällige Datensätze mit T-SQL "auswählt"

8

Das ist eine einfache Frage, die eigentlich schwer zu beantworten ist, weil das "Picking" eine besondere Bedeutung hat.

Ich muss drei zufällige Picks für jede Person geben (und die Pick- / Reihenanzahl von 1, 2 und 3 angeben). Was es schwierig macht, ist, dass die Personen und die Plektren aus verschiedenen Tabellen stammen und es keine logische Verbindung zwischen der Person und den Plektren gibt.

Das , das ich am nächsten bekomme , ist:

%Vor%

Ich weiß, dass das obige nicht Person und Picks ist, aber es ist ein funktionierendes SQL, dass jeder es ausprobieren kann, ohne eine Person zu erstellen, und zuerst Tabellen auswählt. Und,

Es veranschaulicht das Problem, vor dem ich stehe -

das obige SQL wird jeder Person die gleichen Picks geben, während ich verschiedenen Personen verschiedene Picks geben muss.

Wie geht das? Danke.

    
xpt 08.12.2016, 01:27
quelle

3 Antworten

5

Das Hinzufügen einer korrelierten Bedingung in CROSS APPLY löst Ihr Problem

%Vor%

Überprüfen Sie die alias name in Where -Klausel beide LHS und RHS sind von der gleichen table und gleiche column es ist nur die Unterabfrage für jede Zeile in databases Tabelle

auszuführen     
Pரதீப் 08.12.2016, 01:29
quelle
0

Wenn Sie Ihre eigene Antwort etwas modifizieren, wird das funktionieren. Überprüfen Sie dies.

%Vor%

Die einzige Änderung, die ich gemacht habe, ist das Ersetzen von NULL durch NEWID() .

    
Chamika Goonetilaka 08.12.2016 06:06
quelle
-5

Die Zufallsfunktion ist in der Sql-Sprache verfügbar und könnte dazu verwendet werden, eine Datensatz-ID in einem Bereich von Datensatz-IDs, die in der Quellentabelle gefunden werden, zufällig auszuwählen.

In einer neueren sql-Version denke ich, dass das funktioniert, aber ich kann es derzeit nicht testen. Ältere SQL-Version unterstützt den Befehl by rand () nicht. Versuchen Sie dies, lassen Sie mich wissen, ob es funktioniert. Später in dieser Woche kann ich Ihnen etwas, das auf SQL 2000 und höher arbeiten wird. Das musste ich vor Jahren tun. Lassen Sie mich wissen, ob dies auf Ihrem SQL 2008 funktioniert.

wähle top 3 aus table_name order by rand ()

    
M T Head 08.12.2016 01:33
quelle

Tags und Links