Hej
Potrzebuję zbudować prosty skrypt, który pozwoli mi losowo przyporządkować zawodnikom pozycje startowe z zakresu <1;6>. Być może można zrobić to szybciej w innym języku, lub w excelu, ale ja myślę, ze w SQL też powinno się udać.
Zasada działania:
- Mamy listę 6 zawodników (P1, ... , P6)
- Mamy listę 6 pozycji startowych (1, ... , 6)
- Chcemy każdemu zawodnikowi przypisać jeden losowy numer
a) Losowanie bez powtórzeń - Każdy kolejny losuje z puli pozostałych pozycji
b) Ostatni wiadomo - dostaje to co zostało - Tworzymy zapytanie losujące - może być update wartości w tabeli, a może być tylko wyświetlenie
- Każde uruchomienie zapytania powinno zwracać inne przyporządkowanie
Ok, zaczynamy.
Przygotowujemy sobie dane:
CREATE TABLE ZAWODNICY (
IMIE nvarchar(255),
POZ INT )
----------------------------
INSERT INTO ZAWODNICY (IMIE)
VALUES (N'P1'),('P2'),('P3'),(N'P4'),('P5'),('P6')
----------------------------
CREATE TABLE POZYCJE (
NR INT )
----------------------------
INSERT INTO POZYCJE (NR)
VALUES (1),(2),(3),(4),(5),(6)
Tabela POZYCJE powstała na wszelki wypadek. być może się przyda.
Następny krok - tworzymy zapytanie dynamiczne:
DECLARE
@imie nvarchar(255),
@poz int
DECLARE los CURSOR FOR
SELECT imie, poz from ZAWODNICY
OPEN los;
FETCH NEXT FROM los INTO @imie, @poz;
WHILE (@@FETCH_STATUS = 0)
BEGIN
PRINT @imie
PRINT @poz;
FETCH NEXT FROM los INTO @imie, @poz;
END
CLOSE los
DEALLOCATE los
I na tym moje pomysły się kończą...
obecnie próbuje coś wykombinować z funkcją RAND(), ale ona losuje z zakresu <0;1>
Być może ktoś z Was tworzył coś podobnego?
Szukam cały wieczór i nie mogę znaleźć podobnego automatu :(