Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Объркани SQL данни - Изберете в израза за актуализиране

Бих изчислил предварително горните стойности и бих ги съхранил във временна таблица, преди да извърша АКТУАЛИЗАЦИЯТА:

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);

Не съм сигурен обаче как NumberOfResults и NumberOfPlaces са определени. Избирате най-висока позиция, но никога не изчислявате числа. Може би можете да добавите това към SELECT:

...,
(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. Възстановяване на базата данни на SQL Server - неуспешно:38 (достигна края на файла.)

  2. Екземпляр на SQL Server 2008

  3. Как да намерите работни места за агент на SQL Server в Azure Data Studio

  4. преобразуване на времевата марка на Epoch в sql сървър (формат, четим от човека)

  5. Алтернатива за декартово и кръстосано съединение