2013-09-06 4 views
1

업데이트 표

UPDATE #YesterdayAssignments 
SET ThisWeek = (
       SELECT COUNT(*) 
       FROM #YesterdayAssignments U 
    INNER JOIN vstudyassignments A 
     ON U.HHID = A.lhouseholdid 
    INNER JOIN tstudies S 
     ON S.lstudyid = A.lstudyid 
WHERE S.lstudytypeid IN (0,1,2) 
    AND S.bafteruse <> 1 
    AND S.lstatusid = 1 
    AND (A.dmailingdate BETWEEN DATEADD(DAY,1-DATEPART(dw,GETDATE()),GETDATE()) AND GETDATE() 
     OR A.dPulledDate BETWEEN DATEADD(DAY,1-DATEPART(dw,GETDATE()),GETDATE()) AND GETDATE()) 
    AND S.dMailingDate < GETDATE() 
       GROUP BY HHID 
       ) 
FROM #YesterdayAssignments U 
    INNER JOIN vstudyassignments A 
     ON U.HHID = A.lhouseholdid 
    INNER JOIN tstudies S 
     ON S.lstudyid = A.lstudyid 
WHERE S.lstudytypeid IN (0,1,2) 
    AND S.bafteruse <> 1 
    AND S.lstatusid = 1 
    AND (A.dmailingdate BETWEEN DATEADD(DAY,1-DATEPART(dw,GETDATE()),GETDATE()) AND GETDATE() 
     OR A.dPulledDate BETWEEN DATEADD(DAY,1-DATEPART(dw,GETDATE()),GETDATE()) AND GETDATE()) 
    AND S.dMailingDate < GETDATE() 
    AND HHID = U.HHID 

나는 오류를 얻을;

Msg 512, Level 16, State 1, Line 1 

하위 쿼리가 두 개 이상의 값을 반환했습니다. 하위 쿼리가 =,! =, <, < =,>,> = 또는 하위 쿼리가 식으로 사용될 때 하위 쿼리가 수행되는 경우에는 허용되지 않습니다. 명세서가 종료되었습니다.

여러 값으로 테이블을 업데이트해야합니다. 어떤 아이디어?

+0

내가 실수가 아니라면 ThisWeek (SELECT COUNT (*) FROM ...)에 지정하는 쿼리로 여러 값을 반환합니다. 예를 들어 ThisWeek가 3과 4와 같다고 말하고 있습니까? : -S – Anna

+0

쿼리를 다시 만들지 않고 SELECT와 COUNT (*) 사이의 TOP 1을 하위 쿼리에 던지기 만하면됩니다. 하나의 값만 반환되도록 하위 쿼리의 WHERE 절을 구체화해야 할 수도 있습니다. –

답변

0

나는이 쿼리가 당신이 생각하는 것을하고 있다고 생각하지 않는다. 이 (프리 핸드)를보십시오 :

WITH data (Total, HHID) AS 
(
    SELECT COUNT(*), 
      HHID 
    FROM #YesterdayAssignments U 
      INNER JOIN vstudyassignments A ON U.HHID = A.lhouseholdid 
      INNER JOIN tstudies S ON S.lstudyid = A.lstudyid 
    WHERE S.lstudytypeid IN (0,1,2) 
      AND S.bafteruse <> 1 
      AND S.lstatusid = 1 
      AND (A.dmailingdate BETWEEN DATEADD(DAY,1-DATEPART(dw,GETDATE()),GETDATE()) AND GETDATE() 
       OR A.dPulledDate BETWEEN DATEADD(DAY,1-DATEPART(dw,GETDATE()),GETDATE()) AND GETDATE()) 
      AND S.dMailingDate < GETDATE() 
    GROUP BY HHID 
) 
UPDATE U 
SET  ThisWeek = Total 
FROM #YesterdayAssignments U 
     INNER JOIN data D ON D.HHID = U.HHID; 

당신이이 방법, 당신은 HHID 그룹화되는 잠재적 인 반환 여러 카운트 (이 하나 이상의 HHID). 그래서 사실상, 당신은하려고합니다 : ThisWeek = val1, val2, ..., valN.

+0

HA HA! 이 덕분에 완벽하게 작동했습니다! – Vogtle

+0

@Vogtle 기쁘게 생각합니다! 이 문제가 해결되면 upvote 및 표시로 자유롭게 느껴보십시오. –