1

これのタイトルが私が言おうとしているものかどうかは本当にわかりませんが、それは私が来ることができる最も近いものです. 私がやりたいことは、クエリから最初の結果を取得し、それらを INSERT ステートメント内のネストされた Select ステートメントで使用することです。これが私の例です。これは、私が探しているものが正しく機能することを示す最初のクエリです。

    SELECT Min(Inquirer.ID) as MinID, Max(Inquirer.ID) as MaxID, 
    Min(Inquirer.Program) as MinProg, Max(Inquirer.Program) as MaxProg,
     COUNT(Inquirer.Name) AS NumOccurrences
    FROM Inquirer
    GROUP BY Inquirer.Name
    HAVING ( COUNT(*) = 2 )

結果は次のように表示されます。

MinID         MaxID           MinProg          MaxProg          NumOccurrences
 27             81            Pavilion         Appleton              2

対応する INSERT で取得した MinID 値と MaxID 値を、次のようなネストされた SELECT と共に使用したいと思います。

Insert into Transfer(InquiryID_fk, ReferElsewhere, ReferMcLean, ReferExternal, ReferredFrom, TransferInquiryID_fk)
Values(SELECT Inquiry.ID from Inquiry 
Where Inquiry.InquirerID_fk = MinID,'Yes',MaxProg,NULL,MinProg,
SELECT Inquiry.ID from Inquiry WHERE Inquiry.InquirerID_fk = MaxID)

そして、それは本当に簡単に言えば、それが達成できるかどうか、またはそれを達成する方法がわからない場合、事前に一時テーブルを作成し、それをループして値を取得する必要がありますか? どんな助けでも大歓迎です、事前に感謝します、

ニックG

4

4 に答える 4

2

この場合、VALUES を使用しないでください。そのまま INSERT INTO ( )... SELECT を使用してください。

例えば

INSERT INTO Transfer(InquiryID_fk, ReferElsewhere, ReferMcLean, ReferExternal, ReferredFrom, TransferInquiryID_fk)
SELECT Min(Inquirer.ID), 'Yes', Max(Inquirer.Program), NULL,     Min(Inquirer.Program), Max(Inquirer.ID)
    FROM Inquirer
    GROUP BY Inquirer.Name
    HAVING ( COUNT(*) = 2 )
于 2012-08-01T19:55:44.507 に答える
1

このコードで試してください

Insert into Transfer(
InquiryID_fk, 
ReferElsewhere,
 ReferMcLean,
 ReferExternal, 
ReferredFrom, 
TransferInquiryID_fk)
SELECT Min(Inquirer.id), `yes`,Max(Inquirer.Program), null, Min(Inquirer.Program), Max(Inquirer.ID)
FROM Inquirer
GROUP BY Inquirer.Name
HAVING ( COUNT(*) = 2 )
于 2012-08-01T20:01:55.363 に答える
0

新しいテーブルを使用すると問題は解決しますが、ネストされた選択がクエリに追加されすぎてパフォーマンスが低下する可能性があるため、お勧めしません。

あなたの場合、このためのストアドプロシージャを作成します

  • 2 つの変数を使用して、このためのストアド プロシージャを作成しますMinIdMaxId
  • 最初の選択 (minid と maxId を取得します) で、これらの変数の値を設定します

それらは、クエリで次の変数を使用します。

Insert into Transfer(InquiryID_fk, ReferElsewhere, ReferMcLean, ReferExternal, ReferredFrom, TransferInquiryID_fk)
 SELECT Inquiry.ID from Inquiry Where Inquiry.InquirerID_fk = @MinID
 ,'Yes'
 ,MaxProg
 ,NULL
 ,MinProg
 ,SELECT Inquiry.ID from Inquiry WHERE Inquiry.InquirerID_fk = @MaxID
于 2012-08-01T19:51:50.347 に答える
0

これはうまくいくはずです。

;with cte as
(
    SELECT Min(Inquirer.ID) as MinID, Max(Inquirer.ID) as MaxID, 
    Min(Inquirer.Program) as MinProg, Max(Inquirer.Program) as MaxProg,
    COUNT(Inquirer.Name) AS NumOccurrences
    FROM Inquirer
    GROUP BY Inquirer.Name
    HAVING ( COUNT(*) = 2 )
)
    Insert into Transfer
    (InquiryID_fk, ReferElsewhere, ReferMcLean, ReferExternal, ReferredFrom, TransferInquiryID_fk)
    SELECT imin.id,'Yes',MaxProg,NULL,MinProg,imax.ID 
    from cte
        inner join inquiry imin on MinID = imin.inquirer_Id 
        inner join inquiry imax on MaxID = imax.inquirer_Id 

しかし、あなたが望むと思うのは、選択して読むことです...

    SELECT imin.id,'Yes',qmax.Program,NULL,qmin.Program,imax.ID 
    from cte
        inner join inquiry imin on MinID = imin.inquirer_Id 
                 inner join inquirer qmin on minid = qmin.id
        inner join inquiry imax on MaxID = imax.inquirer_Id 
                 inner join inquirer qmax on minid = qmax.id

...しかし、それはあなたが持っているSQLの種類によって異なります

于 2012-08-01T20:01:27.320 に答える