1

我有一张记录表

create table rstbljobs  
(  
AutoID identity(1,1),  
AssignedToRstEmpID int,  
priorityid int,  
Jobstatusid int  
)


Insert into rstbljobs values ( 147,202,374)  
Insert into rstbljobs values ( 169,214,374)  
Insert into rstbljobs values ( 170,202,374)  
Insert into rstbljobs values ( 176,202,374)  
Insert into rstbljobs values ( 182,202,374)  
Insert into rstbljobs values ( 147,214,374)  
Insert into rstbljobs values ( 183,202,374)  
Insert into rstbljobs values ( 170,214,374)  
Insert into rstbljobs values ( 182,214,374)  
Insert into rstbljobs values ( 170,202,374)  
Insert into rstbljobs values ( 147,214,374)  
Insert into rstbljobs values ( 147,202,374)  
Insert into rstbljobs values ( 169,202,374)  
Insert into rstbljobs values ( 169,214,374)  

我有另一张桌子 UsersRSDesk

Create table UsersRSDesk  
(  
userid int,  
IsRecruit bit,  
status bit,  
noofhighprtjobs varchar(50)  
)

记录是

insert into UsersRSDesk values (147,1,0,null)  
insert into UsersRSDesk values (169,1,0,null)  
insert into UsersRSDesk values (170,1,0,null)  
insert into UsersRSDesk values (176,1,0,null)  
insert into UsersRSDesk values (182,1,0,null)  
insert into UsersRSDesk values (183,1,0,null)  

查询如下:

select AssignedToRstEmpID,COUNT(AssignedToRstEmpID)as Noofcount from RStblJobs 
group by AssignedToRstEmpID

从上面的查询中,我希望将来自 rstbljobs 的 noofcount 插入 usersrsdesk.noofhighprtjobs 列。每当我更新 rstbljobs 表时,这里也应该反映相同的计数。

4

1 回答 1

0

简短的回答是你可能不应该。存储计算值对于 OLTP 数据库通常不是好的做法(对于 OLAP 来说这是非常正常的),相反,如果这是您需要定期访问的图形,那么您应该考虑创建一个视图:

CREATE VIEW dbo.UserJobs
AS
    SELECT  AssignedToRstEmpID,
            Noofcount = COUNT(AssignedToRstEmpID) 
    FROM    RStblJobs 
    GROUP BY AssignedToRstEmpID;

然后,您可以使用此视图来获取您的计数,如下所示:

SELECT  *
FROM    UsersRSDesk
        LEFT JOIN dbo.UserJobs
            ON UserJobs.AssignedToRstEmpID = UsersRSDesk.userid;

如果您希望这会消耗性能,那么您可以创建一个索引视图:

CREATE VIEW dbo.UserJobs
WITH SCHEMABINDING
AS
    SELECT  AssignedToRstEmpID,
            Noofcount = COUNT_BIG(*) 
    FROM    dbo.RStblJobs 
    GROUP BY AssignedToRstEmpID;

GO
CREATE UNIQUE CLUSTERED INDEX IX_UserJobs_AssignedToRstEmpID 
  ON dbo.UserJobs (AssignedToRstEmpID);

使用索引视图,计数将存储在聚集索引中,但您需要使用NOEXPAND提示来确保索引的使用。

SELECT  *
FROM    UsersRSDesk
        LEFT JOIN dbo.UserJobs (NOEXPAND)
            ON UserJobs.AssignedToRstEmpID = UsersRSDesk.userid;

SQLFiddle 上的示例

于 2013-09-20T15:28:37.223 回答