0

重複の可能性:
クエリされた結果の行を一意の識別子で結合しますか?

以下のように、SQLServer2008には2つのテーブルがあります

表1

       DealNum            DealVresion            Value

        1000                   1                 100
        1000                   2                 200
        1000                   3                 150  
        1000                   4                 130
        1001                   2                  70
        1003                   5                 160
        1003                   0                 120                    

表2

     DealNum            DealVersion              Name 

     1000                    1                   John
     1000                    1                   Bob
     1000                    2                   John
     1000                    2                   Merle
     1000                    3                   Bob
     1000                    3                   Bob
     1000                    5                   Bob
     1001                    2                   Smith
     1001                    2                   stone
     1002                    8                   Andrew
     1003                    5                   Smith
     1003                    0                   Martin
     1003                    0                   Narine

今、私はこれらの2つのテーブルに基づいて左結合したい

     (T1.Dealnum= T2.Dealnum) and (T1.Deal Version = T2.Deal Version)

また、DealNumに重複が表示されないように、Table2の名前を連結する必要があります。

必要な結果:

         DeaLNum           Deal Version          Value          Name

          1000                  1                 100           Jhon,Bob
          1000                  2                 200           John,Merle
          1000                  3                 150           Bob
          1000                  4                 130           NULL
          1001                  2                 70            Smith,Stone                  
          1003                  0                 120           Martin,Narine
          1003                  5                 160           Smith

DealNumとバージョンの名前列を連結する必要があります。同じdealNumとVersionが同じ名前の場合、連結する必要はありません(例:1000-3)

よろしくお願いしますハリー

4

3 に答える 3

1

これを行うには、ユーザー定義関数を作成します。単一のselectステートメントで実行できるかどうかはわかりません。

    create function getNameList(@dealnum int, @dealversion int) returns nvarchar(max)
    begin
    declare @name varchar(max)

    select  @name = coalesce(@name + ', ','') + name
    from    (select distinct name from table2 where dealnum = @dealnum and dealversion = @dealversion) t1

    return @name
    end

それから:

    select  distinct
            t1.dealNum,
            t1.dealVersion,
            t1.value,
            dbo.getNameList(t1.dealNum, t1.dealversion)
    from    table1 t1 join table2 t2 on t1.dealnum = t2.dealnum and t1.dealversion = t2.dealversion
于 2012-07-17T13:55:43.277 に答える
1
;WITH y AS
(
  SELECT DealNum, DealVersion, Name = STUFF((SELECT ',' + y2.Name
    FROM dbo.Table2 AS y2 
    WHERE y2.DealNum = y.DealNum AND y2.DealVersion = y.DealVersion
    GROUP BY y2.Name
    FOR XML PATH(''), 
    TYPE).value(N'./text()[1]', N'nvarchar(max)'), 1, 1, '') 
  FROM dbo.Table2 AS y
)
SELECT x.DealNum, x.DealVersion, x.Value, y.Name
FROM dbo.Table1 AS x 
LEFT OUTER JOIN y 
ON x.DealNum = y.DealNum
AND x.DealVersion = y.DealVersion
GROUP BY x.DealNum, x.DealVersion, x.Value, y.Name;
于 2012-07-17T13:56:42.920 に答える
1

これを試して:

  with cte as (
  select distinct T1.DealNum [T1_DealNum],T1.DealVresion [T1_DealVresion],
 T1.Value [T1_Value],
  T2.DealNum [T2_DealNum],T2.DealVresion [T2_DealVresion],T2.Name [T2_Name]
  from Table1 T1 left outer join Table2 T2
  on (T1.Dealnum= T2.Dealnum) and (T1.DealVresion = T2.DealVresion)
  )
  select [T1_DealNum],[T1_DealVresion],[Name]=  

  STUFF((SELECT ', ' + [T2_Name]
       FROM cte b 
       WHERE a.[T1_DealNum]= b.[T2_DealNum]
       and a.[T1_DealVresion] = b.[T2_DealVresion]
      FOR XML PATH('')), 1, 2, '')
FROM cte a
GROUP BY [T1_DealNum],[T1_DealVresion]
order by [T1_DealNum],[T1_DealVresion]
于 2012-07-17T14:11:06.477 に答える