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.
Das Hinzufügen einer korrelierten Bedingung in CROSS APPLY
löst Ihr Problem
Ü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
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()
.
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 ()
Tags und Links sql sql-server tsql