1

テーブルを更新したい。しかし、クエリはエラーを返します

派生テーブル'colIndex'は、集計、またはDISTINCTまたはGROUP BY句が含まれているため、更新できません。

どうすればこれを達成できますか?直接的な方法がない場合は、別の方法も提案してください。

クエリを含める:

UPDATE COLINDEX
SET
    COLINDEX.QRESID = ROWINDEX.FRESID
FROM (SELECT QE.COLID,PS.ID SECID,PS.T_ID TEMPLATEID,QE.QUESTIONID,
    MIN(QE.SEQNUM) SEQNUM, Q.QRESID
    FROM SECTION PS
    JOIN SECTIONQUESTIONLINK SX ON PS.ID = SX.SECID
    JOIN QUESTION Q ON SX.QUESTIONID=Q.ID
    JOIN ELEMENT QE ON SX.QUESTIONID=QE.QUESTIONID
    WHERE QE.CONTROLID<>12 
    GROUP BY PS.ID,COLID,PS.T_ID,QE.QUESTIONID ,Q.QRESID)COLINDEX
JOIN (SELECT QE.SEQNUM FSEQNO,QE.ERESID FRESID,PS.ID SECID,PS.T_ID TEMPLATEID,QE.COLID FROM SECTION PS
    JOIN SECTIONQUESTIONLINK SX ON PS.ID = SX.SECID
    JOIN ELEMENT QE ON SX.QUESTIONID=QE.QUESTIONID
    WHERE QE.CONTROLID=12 AND QE.SEQNUM <= PS.COLUMNS + PS.ROWLABEL)ROWINDEX
ON COLINDEX.SECID=ROWINDEX.SECID AND COLINDEX.COLID=ROWINDEX.COLID
AND COLINDEX.TEMPLATEID=5000

このクエリの一部から、更新する行を正しくプルします。

4

1 に答える 1

2

それCOLINDEXが派生テーブルであるとすると(つまり、実際には存在しません)、どのように更新できますか?

本当に必要なQUESTIONのは、を含むテーブルであるを更新することのようですQRESID

更新ステートメントを再構築する必要があります。次のクエリのようになります。私は(あなたのテーブルを持っていないので)これをテストしなかったことを理解してください、そしてそれは劇的に単純化される可能性があります:

UPDATE QUESTION
SET QUESTION.QRESID = Source.FRESID
FROM QUESTION 
   JOIN ( SELECT QRESID, FRESID FROM
     (SELECT QE.COLID,PS.ID SECID,PS.T_ID TEMPLATEID,QE.QUESTIONID,
     MIN(QE.SEQNUM) SEQNUM, Q.QRESID
     FROM SECTION PS
    JOIN SECTIONQUESTIONLINK SX ON PS.ID = SX.SECID
    JOIN QUESTION Q ON SX.QUESTIONID=Q.ID
    JOIN ELEMENT QE ON SX.QUESTIONID=QE.QUESTIONID
    WHERE QE.CONTROLID<>12 
    GROUP BY PS.ID,COLID,PS.T_ID,QE.QUESTIONID ,Q.QRESID)COLINDEX
      JOIN (SELECT QE.SEQNUM FSEQNO,QE.ERESID FRESID,PS.ID SECID,PS.T_ID TEMPLATEID,QE.COLID     FROM SECTION PS
    JOIN SECTIONQUESTIONLINK SX ON PS.ID = SX.SECID
    JOIN ELEMENT QE ON SX.QUESTIONID=QE.QUESTIONID
    WHERE QE.CONTROLID=12 AND QE.SEQNUM <= PS.COLUMNS + PS.ROWLABEL)ROWINDEX
ON COLINDEX.SECID=ROWINDEX.SECID AND COLINDEX.COLID=ROWINDEX.COLID
AND COLINDEX.TEMPLATEID=5000) Source
ON Source.QRESID = QUESTION.QRESID
于 2013-03-21T15:42:41.803 に答える