2013-02-06 2 views
16
UPDATE [asgdb01].[dbo].[info] 
SET [FM] = SUM(a.[PAZARTESI] - b.[KOTA]) 
FROM [asgdb01].[dbo].[info] a, [asgdb01].[dbo].[kota] b 
WHERE a.[WORK_TYPE]='IN' AND a.[NAME]='ALP' 

의 설정 목록에 표시되지 않을 수도 있습니다?집계는 UPDATE 문

+2

실제로 카티 션 제품을 원하십니까?. 또한, 어떤 RDBMS를 사용하고 있습니까? – Lamak

+0

나는 mssql을 사용하고, 다른 테이블에서 오는 pazartesi와 kota를 빼기를 원한다. –

+2

두 개의 다른 테이블을 사용하고 싶지만 두 테이블 사이에'JOIN' 조건을 사용하지 않는다는 것을 알고 계십니까? – Lamak

답변

27

나는 (다른 사람들이 지적했듯이)이 업데이트에 데카르트를 원하지 않으므로 쿼리에 "ID"를 추가 했으므로 수정을해야하지만이 방법을 사용하면 오른쪽 경로에

;with temp as (
    select a.id, SUM(a.pazartesi - b.kota) as newTotal 
    from [asgdb01].[dbo].[info] a join [asgdb01].[dbo].[kota] b 
      on a.id = b.id 
    where a.work_type='in' and a.name='alp') 
update a 
set  fm = t.newTotal 
from [asgdb01].[dbo].[info] a join temp t on a.id = t.id 
+0

나는 합계 대신에 카운트를 사용하도록 임시 ID로 그룹화해야했습니다. 환상적인 대답. –

+0

+1 [CTEs] (https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql)와는 대조적으로 우아하고 우수한 성능의 솔루션입니다. [CROSS] 또는 인라인 서브 쿼리를 사용하는 [수많은] (https://stackoverflow.com/questions/25937315/) 다른 방법. – dakab