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

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。ステートメントは終了されました。

複数の値でテーブルを更新する必要があります。何か案は?

4

1 に答える 1

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

于 2013-09-06T17:06:43.583 に答える