2016-08-05 8 views
-1

次の問題があり、SQLはまだ私の最も強力なスキルではありません。私は、Quoted Systemの各見積もりの​​金額を返すために働くSQL Server 2014の次の手順を持っています。それぞれの引用は、順番にそれらの中に部品を持っているグループを、持っている:Whileループを使用してT-SQLに列を取り込み

USE [My_DB_Name] 
GO 

DECLARE @QuoteNumberID int; 

SELECT @QuoteNumberID = QuoteNumberId FROM [Quote].[Quote] 

    WHILE @QuoteNumberID IS NOT NULL 
    BEGIN 

       INSERT INTO [Quote].[ZQuoteBackupGL117] (QuoteAmount)( 
       SELECT ISNULL(SUM(ExtendedPrice) ,0) AS QuoteTotal 
       FROM(
         SELECT (Quantity * ((UnitPrice - ISNULL(DollarDiscount, 0)) - 
         ROUND((((ISNULL(PercentDiscount,0)/100 + ISNULL(CustomerPercentDiscount,0)/100))) * UnitPrice, 2))) AS ExtendedPrice 
         FROM [Quote].[PartGroupPart] p 
          INNER JOIN [Quote].[QuotePartGroup] g ON p.PartGroupID = g.PartGroupID 
          INNER JOIN [Quote].[ZQuoteBackupGL117] q ON g.QuoteID = q.QuoteID 
         WHERE QuoteNumberId = @QuoteNumberID AND g.IsRecommended = 0 AND g.ExcludeFromTotal = 0 AND (q.GrandTotalValue IS NULL OR q.GrandTotalValue = 0) 
        )tmp) 

        SELECT @QuoteNumberID = MAX(QuoteNumberId) FROM [Quote].[Quote] WHERE @QuoteNumberId > QuoteNumberID 
    END 

私は何をしようとしていることQuoteTotalの値を取得し、[引用]で新しいフィールドに入れている。[ZQuoteBackupGL117]テーブルの各エントリにQuoteAmount(money、allow nulls)という名前のバックアップテーブルがあります。私は後でそれを私のプロダクションテーブルでも実行します。通常、これはループを使用しないでください。ただし、このクエリはQuoteAmountを一度実行して遡及的な引用文を作成することのみを目的としています。 INSERT INTOを使用してみましたが、このループを使用してどのように構造化するのかはわかりません。あなたが私に与えることができるどんな助けも高く評価されます。

+1

明らかに、これはループではなく、挿入文または更新文で行うべきです。あなたは実際に何をしようとしているのかわからないので、あなたの例では更新または挿入ステートメントが使用されている場所は表示されません。 – Hogan

+0

@Hoganは、私がしようとしていることをよりよく説明しようと更新しました。 – DarthVis17

+0

内部クエリは単一のQuoteNumberIDに対して複数の行を返しますか?つまり、複数の部品にまたがる見積もり合計を生成しようとしていますか? – AaronLS

答えて

0

おそらくこのようなものが必要です。

UPDATE [Quote].[ZQuoteBackupGL117] 
    SET QuoteAmount = (
    SELECT (Quantity * ((UnitPrice - ISNULL(DollarDiscount, 0)) - ROUND((((ISNULL(PercentDiscount,0)/100 + ISNULL(CustomerPercentDiscount,0)/100))) * UnitPrice, 2))) AS ExtendedPrice 
    FROM [Quote].[PartGroupPart] p 
    JOIN [Quote].[QuotePartGroup] g ON p.PartGroupID = g.PartGroupID 
    JOIN [Quote].[ZQuoteBackupGL117] q ON g.QuoteID = q.QuoteID 
    WHERE QuoteNumberId = @QuoteNumberID AND g.IsRecommended = 0 AND g.ExcludeFromTotal = 0 AND COALESCE(q.GrandTotalValue,0) = 0 
)  
WHERE QuoteNumberId = @QuoteNumberID 

しかし、私はそれにお金を賭けません。

+0

これは、見積り、それは良いスタートです、ありがとうございます。 – DarthVis17

+0

@ DarthVis17 - 何が欠けているのですか?あなたはインナークエリでQuoteIDにグループを欲しいですか? – Hogan

関連する問題