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

3 つのテーブルを JOIN し、複数の行からのデータを個別の列の DISTINCT 行ごとに集計します

    より効率的なクエリを作成するためにデータ構造を変更できないと仮定すると、これはうまくいきます:

    --Populate sample data
    SELECT 1 as key1,       2  as key2 INTO #tbl1
    UNION ALL SELECT 1,       5 
    UNION ALL SELECT 1,       6 
    UNION ALL SELECT 1,       4 
    UNION ALL SELECT 1,       8 
    
    SELECT 1  as key1,     'Desc short' as shortkeydesc INTO #tbl2
    
    SELECT 1   as key1,    'Desc a'  as [description] INTO #tbl3
    UNION ALL SELECT 1,       'Desc c' 
    UNION ALL SELECT 1,       'Desc aa' 
    UNION ALL SELECT 1,       'Desc tt' 
    
    --Combine data into semi-colon separated lists
    SELECT 
    key1
    ,STUFF(
        (
        SELECT
          ';' + CAST(t2.key2 AS VARCHAR(10))
        FROM #tbl1 t2
        WHERE t2.key1 = tbl1.key1
        FOR XML PATH('')
        ), 1, 1, ''
      )
    ,STUFF(
        (
        SELECT
          ';' + tbl2.shortkeydesc
        FROM #tbl2 tbl2
        WHERE tbl2.key1 = tbl1.key1
        FOR XML PATH('')
        ), 1, 1, ''
      )
    ,STUFF(
        (
        SELECT
          ';' + tbl3.[description]
        FROM #tbl3 tbl3
        WHERE tbl3.key1 = tbl1.key1
        FOR XML PATH('')
        ), 1, 1, ''
      )
    FROM #tbl1 tbl1
    GROUP BY tbl1.key1
    


    1. mysqlユーザー行レベルのアクセス

    2. 配列フィールドにDoctrine2の特定の値が含まれているかどうかを照会する方法はありますか?

    3. SQL Server:リンクサーバーでユーザー定義関数(UDF)を呼び出す方法は?

    4. 配列パラメータをネイティブクエリにバインドします