1

以下は3つの表です

QuotationMaster

QuoteID QuoteNo  CustomerName
-----------------------------
1       Q1      Name1 
2       Q2     Name2   
3       Q3      Name3   
4       Q4      Name4   
5       Q5      Name5   

QuoteItemDetails:1つの見積もりに多くのアイテムを含めることができます

QuoteItemID  QuoteID    ItemCode    ItemID   
---------------------------------------------
   1          1         100          1 
   1          1         200          2       
   2          2         200          2       

QuoteBatchDetailsQuoteItem多くのバッチを持つことができQuoteIDItemID共通の列です。BatchNovarcharです

QuotebatchID  QuoteID   BatchNo    ItemID   
---------------------------------------------
   1          1          A          1       
   2          1          B          1  
   3          1          C          2  
   4          2          E          2       
   5          2          F          2  

結果が欲しい

  QuoteID    QuoteNo     CustName  ItemCode  BatchNo     
    -------------------------------------------------
       1          Q1         Name1     100       A,B 
       1          Q1         Name1     200        C     
       2          Q2         Name2     200       E,F   

INT型のパラメータとしてQuoteIDを取り、上記のような結果を得るプロシージャを作成したいと思います。

私が直面している唯一の問題は、ItemID、さらにはQuoteIDに依存するBatchNoを連結することです。

以下のクエリを使用して、特定のIDのBatchNoを連結することはできますが、これをメインプロシージャに追加する方法がわかりません。そうすると、サブクエリが複数の値を返すようにエラーがポップアップします。複数のアイテムが存在する可能性があります。

select 
    ID.QuoteID,ID.ItemID,
    stuff((select ', ' + BatchNo 
           from SD_QuoteBatchDetails BD where ID.ItemID=BD.ItemID and ID.QuoteID=BD.QuoteID       
           for xml path('')),
          1,2,'') [Values]
from SD_QuoteItemDetails QID,SD_QuoteBatchDetails ID where ID.QuoteID=QID.QuoteID 
group by ID.ItemID,ID.QuoteID

誰でも同じもののクエリを提供できますか?

4

1 に答える 1

1
SELECT  b.QuoteItemID, 
        a.QuoteNo,
        a.CustomerName,
        b.ItemCode,
        c.BatchList
FROM    QuotationMaster a
        INNER JOIN QuoteItemDetails b
            ON a.QuoteID = b.QuoteID
        INNER JOIN
        (
          SELECT
               QuoteID, 
               ItemID,
               STUFF(
                   (SELECT ', ' + BatchNo
                    FROM   QuoteBatchDetails
                    WHERE  QuoteID = a.QuoteID AND
                           ItemID = a.ItemID
                    FOR XML PATH (''))
                    , 1, 1, '')  AS BatchList
          FROM  QuoteBatchDetails AS a
          GROUP BY QuoteID, ItemID
        ) c ON  b.QuoteID = c.QuoteID  AND
                b.ItemID = c.ItemID;
于 2013-02-22T06:13:45.263 に答える