2014-02-20 3 views
3

Я пытаюсь обновить столбец Number_Of_Marks в нашей таблице Results, используя результаты, полученные из нашего заявления SELECT. Наш оператор select используется для подсчета количества меток на модуль в нашей таблице результатов. В SELECT заявлении работы и вывод правилен, которыйобновить существующий столбец с результатами запроса select с использованием sql

ResultID ModuleID cnt 
------------------------- 
    111  ART3452 2               
    114  ART3452 2               
    115  CSC3039 3               
    112  CSC3039 3               
    113  CSC3039 3 

В таблице использования является:

Результаты: ResultID, ModuleID, Number_Of_Marks

Нам нужны результаты ЕНТ быть обновлены в нашей колонке Number_Of_Marks. Это наш код ниже ...

DECLARE @cnt INT 

SELECT @cnt 

SELECT C.cnt 
    FROM Results S 
     INNER JOIN (SELECT ModuleID, count(ModuleID) as cnt 
        FROM Results 
        GROUP BY ModuleID) C ON S.ModuleID = C.ModuleID 

    UPDATE Results 
    SET [Number_Of_Marks] = (@cnt) 

ответ

4

Вы можете сделать это в SQL Server с помощью update/join синтаксис:

UPDATE s 
    SET [Number_Of_Marks] = c.cnt 
    FROM Results S INNER JOIN 
     (SELECT ModuleID, count(ModuleID) as cnt 
     FROM Results 
     GROUP BY ModuleID 
     ) C 
     ON S.ModuleID = C.ModuleID; 

я предполагаю, что вы хотите, чтобы счетчик из подзапроса, а не от неинициализированная переменная.

EDIT:

В общем, когда вы изменяете вопрос лучше задать другой вопрос. Иногда, однако, изменения действительно небольшие. Пересмотренный запрос выглядит примерно так:

UPDATE s 
    SET [Number_Of_Marks] = c.cnt, 
     Marks = avgmarks 
    FROM Results S INNER JOIN 
     (SELECT ModuleID, count(ModuleID) as cnt, avg(marks * 1.0) as avgmarks 
     FROM Results 
     GROUP BY ModuleID 
     ) C 
     ON S.ModuleID = C.ModuleID; 

Обратите внимание, что я умноженной на marks на 1.0. Это быстрый и грязный способ преобразования целого числа в числовое значение. SQL Server получает средние значения для целых чисел и производит целое число. Обычно вы хотите какое-то десятичное или плавающее значение.

+0

работал отлично, высоко ценился :) – user3332742

Смежные вопросы