2017-06-02 4 views
0

私は各クライアントが私たちと共に置くことができる注文のタイプを表示する方法を理解しようとしています。我々は以下のテーブルを持っていますCLIENT_SERVICE_TYPE、SERVICE_TYPES、PRODUCT_TYPESQL - すべての商品タイプを承認済みのリストから要約する

私たちはフルーツと野菜に簡単に関連付けることができる多くのサービスタイプがあります。

CLIENTS - リストのすべてのお客様
CLIENT_SERVICE_TYPE - リスト彼らは置くことが許可されているサービスの種類(りんご、梨、バナナ、スカッシュ、チキン)のすべて。
SERVICE_TYPES - 私たちが提供する数百、数百の果物と野菜をリストしています。営業担当者| | 製品タイプ
会社ABC |ジェーン・スミス| 果物

私はこの

会社名のように、特定のクライアントを表示する要約レポートを作成できるようにしたいです
会社名XYZ |ジョー・アードバーク| Joe Aardvark 野菜、フルーツ
会社123 |エイミー・アダムス| 肉、野菜、上記の例ではフルーツ

は、ABC社は、15個の認可果実(バナナ、リンゴ、オレンジ、等)を有しているが、その一行に1 果実として要約します。 XYZ社には15種類の認定フルーツと1人のニンジンがいます。私はそれが同じ行に野菜、果物として表示する(順序は関係ありません)したい。会社123は、4つのサービス(チキン、バナナ、エンドウ豆、スクワッシュ)のみの認可を受けています。 肉、野菜、フルーツ

私はこれはおそらく既存のチュートリアルを見つけるのは簡単だろうが、私の専門用語は明らかにそれほどではない。これは私の知る限りであり、あなたが推測できるように、承認されたX種類のサービスタイプに対して複数の行が表示されています。

SELECT 
    company [Client Name] 
    ,salesperson [Sales Rep] 
    --,pt.productTypeName [List of approved Product Types] 
    FROM CLIENT cl (NOLOCK) 
     LEFT JOIN 
    CLIENT_SERVICE_TYPE cst (NOLOCK) = cl.client_key = cst.client_key 
     LEFT JOIN 
    SERVICE_TYPE st (NOLOCK) = cst.service_key = st.service_key 
     LEFT JOIN 
    PRODUCT_TYPE pt (NOLOCK) = cst.productTypeId = pt.productTypeId 
WHERE cl.client_program_id in (1,2,3) 
    and status = 160 
ORDER BY company 
+0

あなたは 'GROUP BY'を試しましたか?また、単一の列に複数の行の値が必要な場合は、おそらく 'PIVOT'またはサブクエリも必要になります。 –

+0

私はGroup Byを試してみましたが、それは私が達成したいと思っているものの一部ではないようです。 上記の例では、結果は次のようになります 会社XYZ |ジョー・アードバーク| Joe Aardvark **野菜** 会社XYZ |ジョー・アードバーク| Joe Aardvark **果物** – dplres81715

+0

私は[有望なリンク]を見つけた(https://stackoverflow.com/questions/6899/how-to-create-a-sql-server-function-to-join-multiple-rows-from- a-subquery-into)ここで、最後にGROUP BYを使用してデータを1つの値に結合できます。私がやりたかったことの100%ではありませんが、それほど近くになければ気になりません。 – dplres81715

答えて

0

試行錯誤で回答が見つかりました。 SELECT文の中で、これは私はそれが

SELECT 
company as [Company Name] 
,salesperson as [Sales Rep] 
,(STUFF((SELECT CAST(', ' + productTypeName AS VARCHAR(MAX)) 
    FROM CLIENT_SERVICE_TYPE cst 
     LEFT JOIN 
    SERVICE_TYPE st on cst.service_type_key = st.service_type_key 
     LEFT JOIN 
    PRODUCT_TYPE pt on st.product_type_key = pt.product_type_key 
    WHERE c.client_key = cst.client_key 
    GROUP BY pt.product_type_name 
    FOR XML PATH ('')),1,2, '')) [Product Types] 
FROM CLIENT c 

エンドが
会社名を結果やった方法です|営業担当者|製品タイプ
会社名ABC |ジェーンスミス| フルーツ
会社XYZ |ジョー・アードバーク| Joe Aardvark 野菜、フルーツ
会社123 |エイミー・アダムス| 肉、野菜、果物

関連する問題