2009-10-19 6 views
1

У меня есть приложение, сотрудник типа др, таблица выглядит следующим образом:Обновления основная таблица на основе строк из вторичной таблицы

Employee (ID, name, selectionCount) 

Selections (employeeID, ipAddress) 

Теперь мне нужен запрос обновления, который будет рассчитывать количество выбора для каждого EmployeeID (с уникальными IPaddresses) и обновить столбец selectionCount в таблице Employee.

ответ

1

Что-то, как это должно работать:

WITH SelectionCounts(EmployeeId, SelectionCount) 
AS 
(
    SELECT s.EmployeeId, COUNT(DISTINCT IpAddress) AS SelectionCount 
    FROM Selections s 
    GROUP BY s.EmployeeId 
) 
UPDATE Employee 
SET SelectionCount = sc.SelectionCount 
FROM SelectionCounts sc 
WHERE ID = sc.EmployeeId 

не проверял, так что синтаксис может быть не совсем корректно.

0

не эксперт SQL Server, но что-то, как это должно работать:

update Employee a 
    set selectionCount = (select count(*) 
          from Selections 
          where employeeID = a.ID) 

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

+0

его желательно в шахте :) – mrblah

1
update Employee 
set selectionCount = (select count(distinct ipAddress) 
         from Selections 
         where Selections.emmployeeID = Employee.ID) 
1

Принимая на борту najmeddine решения, вы можете поместить этот код в вставки и/или триггер обновления для таблицы Выборки в SQL Server:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE TRIGGER UpdateSelectionCount ON Selections 
    AFTER UPDATE, INSERT 
AS 
BEGIN 
    SET NOCOUNT ON 

    UPDATE 
     Employee 
    SET 
     selectionCount = (SELECT 
           COUNT(DISTINCT ipAddress) 
          FROM 
           Selections 
          WHERE 
           Selections.EmployeeID = Employee.ID) 

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