sql >> データベース >  >> RDS >> Sqlserver

複数のテーブルから複数の行を連結する

    あらすじありがとうございます!歯を抜いてスキーマとデータを取得するよりもはるかに優れています。 :-) これを Gist クエリにプラグインすると、目的の結果が表示されるはずです (まあ、非常に近い - 以下を参照してください)。

    DECLARE @SalesRepID INT, @SurgeonID INT, @LocationID INT;
    SELECT @SalesRepID = 2, @SurgeonID = 1, @LocationID = 1;
    
    ;WITH x AS 
    (
      SELECT CommissionPercent, Categories = STUFF((SELECT ', ' 
          + tCat.Category FROM #tCategories AS tCat 
          INNER JOIN #tCommissions AS tCom 
          ON tCat.CategoryID = tCom.CategoryID
          WHERE tCom.CommissionPercent = com.CommissionPercent
          FOR XML PATH, TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') 
     FROM #tCommissions AS com
     WHERE SalesRepID = @SalesRepID
     AND SurgeonID = @SurgeonID
     AND LocationID = @LocationID
    ),
    y AS
    (
      SELECT s = RTRIM(CommissionPercent) + ' (' + Categories + ')' 
      FROM x GROUP BY CommissionPercent, Categories
    )
    SELECT Result = STUFF((SELECT ', ' + s FROM y 
      FOR XML PATH, TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '');
    

    結果は要求したものとは少し異なりますが、CommissionPercent を取得するときに文字列の書式設定を適用することで修正できます。

    Result
    --------------------------------------------------------
    0.05 (Shirts, Shoes, Dresses), 0.10 (Hats), 0.15 (Pants)
    


    1. PreparedStatementを含むJDBCバッチがMySQLで機能しない

    2. MySQLはLIMIT付きの結果の合計を選択します

    3. COUNT(*)GROUP BYがある場合とない場合、一致する行はありません

    4. Railsモデリング:HABTMをhas_manyに変換:through