2016-10-20 5 views
1

이 질문에 대한 답변을 얻었지만 여러 가지 예제를 통해 INNER JOIN을 사용하여 한 테이블에서 다른 테이블로 데이터를 전송하고 상황이 조금 다릅니다. .SQL Server의 한 테이블에서 집계 함수를 사용하여 쿼리 업데이트

기본적으로이 작업은 SELECT 문을 Update 문으로 변경하는 것입니다.

SELECT 
    SR, 100. * Cast(Round(AVG(Three_1 + Three_2 + Three_3 + Three_4 + Three_5 + Three_6 + Three_7 + Five_1 + Six_1 + Six_3)/38,0) as int) 
FROM 
    MainDB 
WHERE 
    Ctype = 'Call' 
GROUP BY 
    SR 

필자는 일부 열의 백분율을 성공적으로 계산할 수 있었지만 그 정보로 열을 업데이트하려고했습니다. 내 첫 번째 시도 내가 오류가있어이

UPDATE QAMainDB 
SET TCX_score = 100. * avg(three_1 + Three_2 + Three_3 + Three_4 + Three_5 + Three_6 + Three_7 + Five_1 + Six_1 + Six_3)/38 

했다 : 더 흔적을 수행 한 후

An aggregate may not appear in the set list of an UPDATE statement.

및 오류 나는 스택에 앞의 예에서 변수를 선언하기 위해이 방법을 시도했다.

Declare @Result Decimal = 0 

SET @Result = 100. * Cast(round(avg(three_1 + Three_2 + Three_3 + Three_4 + Three_5 + Three_6 + Three_7 + Five_1 + Six_1 + Six_3)/38,0) as int) 

UPDATE QAMainDB 
SET TCX_score = @Result 
WHERE Ctype = 'Call' 

그러나 실패했습니다. 여러분 중 누가 올바른 방향으로 나를 안내하여 나를 도와 줄 수 있는지 궁금합니다. 나는 SQL에 익숙하지 않으므로 제발 참아주십시오.

감사합니다.

답변

3

어떻게 열과 일치합니까?

WITH m as (
     SELECT SR, 100. * Cast(Round(AVG(Three_1 + Three_2 + Three_3 + Three_4 + Three_5 + Three_6 + Three_7 + Five_1 + Six_1 + Six_3)/38,0) as int) as val 
     FROM MainDB 
     WHERE Ctype = 'Call' 
     GROUP BY SR 
    ) 
Update QAMainDB 
    SET TCX_score = val 
    FROM QAMainDB JOIN 
     m 
     ON m.SR = QAMainDB.SR; 
+0

덕분에, 그럼 처음에는 내가 열을 일치하지만하기 위해 ID를 사용 한 후 나는 다른 이유로 SR로 변경되었습니다. 어쨌든 나는 앞의 예제에서 INNER JOIN 기법을 사용하려고 할 때 코드와 함께 동일한 에러를 얻었을 때 simular라는 코드를 시도했다. – Playergoodi

+0

'm'열 2에 대해 열 이름이 지정되지 않았습니다. – Playergoodi

+0

관리 스튜디오에서 실행 한 후 감사합니다. VS studio 객체 탐색기를 사용하고있었습니다. – Playergoodi

2

것은이 하나에 코드를 변경 시도 : 나는 SR가 테이블 사이의 일치에 사용되는 열은 추측하고있다. 빠른 응답

Update QAMainDB SET TCX_score = (select 100. * avg(three_1 + Three_2 + Three_3 + Three_4 + Three_5 + Three_6 + Three_7 + Five_1 + Six_1 + Six_3)/38) 
+0

안녕하세요 형제 님, 저는 여러분에게 해결책을 시도해 보았습니다. 집계가 UPDATE 문의 집합 목록에 나타나지 않을 수 있습니다. – Playergoodi

+0

update m_produk set harga = (select 100 * avg (old.harga + 200)/5) 여기서 id = 1 –

+0

나는 내 자신의 데이터베이스에서이 코드를 시도하고 작동한다. –

관련 문제