2009-05-29 69 views
1

1つのカテゴリには多くの製品があります。結合テーブルのフィールドを結合する

 
SP Result: 
idCategory Name ProductNames   ProductQuantities 
1   Cat1 Procut1,Product2  24,32 
2   Cat2 ProductX,ProductY 0,61 

ProductNamesとProductQuantitiesが参加しました商品テーブルからの結合(連結)フィールドの値を持つvarchar型フィールドです:私は1つのフィールドにまとめ製品からいくつかのデータを持つすべてのカテゴリを返すにStoredProcedureを構築する必要があります。

 
SELECT idCategory, 
     dbo.NamesFn(idCategory) AS ProductNames, 
     dbo.QuantitiesFn(idCategory) AS ProductQuantities 
FROM Category 

多分1つの機能:

 
Category table: 
idCategory Name 
1   Cat1 
2   Cat2 

Product table: 
idProduct idCategory Name  Quantity 
1   1   Product1 24 
2   1   Product2 32 
3   2   ProductX 0 
4   2   ProductY 61 

は、私はまた、このように、入力パラメータidCategory = 1については「製品1、Product2」を返す関数を、持っていると思います。これは私がDBに持っているものですこれはTable Resultを返すので、すべてのFnではなく、1回だけ参加することになります(これは単純な例ですから、実際のアプリでは4〜5個のフィールドを組み合わせる必要があります)。

このSQL/SPの書き方& Fn?私はMS SQL2005を使用しています

答えて

2

SQL Serverを使用して行を連結する方法はいくつかあります。 thisおよびthisを参照してください。

このクエリが結果セットを生成し、あなたはを求めた:

select c.idCategory, c.Name, 
    replace(
     (select p.Name as [data()] 
     from Product p 
    where p.idCategory = c.idCategory 
    for xml path ('') 
), ' ', ', ') as ProductNames, 
    replace(
     (select p.Quantity as [data()] 
     from Product p 
    where p.idCategory = c.idCategory 
    for xml path ('') 
), ' ', ', ') as ProductQuantities 
from Category c 

編集を追加する: このクエリが結果を生成します。

idCategory Name ProductNames   ProductQuantities 
1   Cat1 Product1, Product2 24, 32 
2   Cat2 ProductX, ProductY 0, 61 
+0

私は既にGoogleを通じてこれらの例を見つけましたが、しないでください知っておく必要がありますテーブルの結果を返す関数とその結果をSPの結果に含める方法 –

+0

リンクの1つにそのような関数のコードが含まれています... –

+0

@Tom Hですが、テーブル結果の関数ではありません –

関連する問題