Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Pomieszane dane SQL — wybierz w instrukcji aktualizacji

Przed wykonaniem AKTUALIZACJI wstępnie obliczyłbym górne wartości i zapisałbym je w tabeli tymczasowej:

SELECT
    R1.Date,
    R1.ContestID,
    (SELECT TOP 1 R2.Position
     FROM Results R2
     WHERE R2.Date = R1.Date AND R2.ContestID = R1.ContestID
     ORDER BY R2.Position DESC) AS TopPosition
INTO #temp
FROM
    (SELECT DISTINCT Date, ContestID FROM Results) R1;

UPDATE Results R
SET    R.Points = 100 + ((100/((SELECT TopPosition FROM #temp T
                                WHERE T.Date = R.Date AND
                                      T.ContestID = R.ContestID)-4) *
                            ((SELECT TopPosition FROM #temp T
                              WHERE T.Date = R.Date AND
                                    T.ContestID = R.ContestID)-R.Position)))
WHERE  R.ContestID > 11
AND    R.Position > 4
AND    R.Position < (SELECT TopPosition FROM #temp T
                     WHERE T.Date = R.Date AND T.ContestID = R.ContestID);

Jednak nie jestem pewien, jak NumberOfResults i NumberOfPlaces są określone. Wybierasz najwyższą pozycję, ale nigdy nie obliczasz żadnych liczb. Może możesz dodać to do WYBIERZ:

...,
(SELECT COUNT(*)
 FROM Results R2
 WHERE R2.Date = R1.Date AND R2.ContestID = R1.ContestID) AS NumberOfResults
INTO ...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dostęp do wiadomości SQL Server przez ADO.NET

  2. Znajdź niezduplikowane rekordy, z wyłączeniem wartości null, na podstawie jednego pola.

  3. Polecenie SQL INSERT działa, ale dane nie pojawiają się w tabeli

  4. Jak używać Try Catch do wyświetlania błędu logowania dla parametrów połączenia (App.Config)

  5. Wstaw podwójne cudzysłowy do danych wyjściowych SQL