전체 상황을 설명해 드리겠습니다 : 아래 두 개의 테이블이 있습니다. Module
테이블 MaxTestCasesExecutedBySingleUser
및 TotalTestCasesExecutedByAllUser
의 값은 일부 집계 절을 사용하여 갱신 될 필요 파라미터로서 Name
(행 ModuleMember
테이블) 소요의 Name
및 TestCasesExecutedByTheUser
의 값을 반환하는 함수 dbo.GetValue
소중한 다른 테이블이UPDATE 문의 집합 목록에서 집계를 사용하는 방법
CREATE TABLE [dbo].[Module](
[ProjectID] [int] NOT NULL,
[ModuleID] [int] NOT NULL,
[ModuleName] [nvarchar](100) NOT NULL,
[MaxTestCasesExecutedBySingleUser] [int] NULL,
[TotalTestCasesExecutedByAllUser] [int] NULL,
PRIMARY KEY ([ProjectID],[ModuleID]))
CREATE TABLE [dbo].[ModuleMember](
[ProjectID] [int] NOT NULL,
[ModuleID] [int] NOT NULL,
[SerialNo] [int] NOT NULL,
[Name] [nvarchar](100) NOT NULL,
PRIMARY KEY ([ProjectID],[ModuleID],[SerialNo]))
Insert Into Module Values (1,1,'Installation_Test',null,null)
Insert Into Module Values (1,2,'Server_Test',null,null)
Insert Into Module Values (1,3,'Client_Test',null,null)
Insert Into Module Values (1,4,'Security_Test',null,null)
Insert Into ModuleMember Values(1,1,0,'Jim')
Insert Into ModuleMember Values(1,1,1,'Bob')
Insert Into ModuleMember Values(1,2,0,'Jack')
Insert Into ModuleMember Values(1,2,1,'Steve')
Insert Into ModuleMember Values(1,2,2,'Roy')
Insert Into ModuleMember Values(1,2,3,'Jerry')
Insert Into ModuleMember Values(1,3,0,'Root')
Insert Into ModuleMember Values(1,3,1,'Tom')
Insert Into ModuleMember Values(1,4,0,'Evil')
테이블의 형태. Module
테이블에서이 두 값을 업데이트해야합니다.
정의 :
MaxTestCasesExecutedBySingleUser = 테스트 케이스는 모듈의 부재에 의해 실행되는 경우, 최대 개수
TotalTestCasesExecutedByAllUser = 모듈의 모든 부재에 의해 실행되는 테스트 케이스의 총 수.
나는 쿼리 아래 시도했지만 그것은 나에게 오류 던지고있다 : An aggregate may not appear in the set list of an UPDATE statement.
UPDATE M
SET
M.MaxTestCasesExecutedBySingleUser = MAX(N.TestCasesExecutedByTheUser),
M.TotalTestCasesExecutedByAllUser = SUM(N.TestCasesExecutedByTheUser)
FROM Module M
JOIN ModuleMember Mem ON (M.ProjectID = Mem.ProjectID AND M.ModuleID = Mem.ModuleID)
CROSS APPLY dbo.GetValue(Mem.Name) N
큰 해결 방법 .... + 1 – SKJ