0

以下问题

我正在使用命令将名称与项目编号连接起来

SELECT DDR_namen.vorname_nachname, DDR_Erfinder_final.pubnr
FROM DDR_namen
RIGHT JOIN DDR_Erfinder_final
ON DDR_namen.vorname_nachname=DDR_Erfinder_final.vorname_nachname

这给了我这样的东西(小例子)

vorname_nachname  Pubnr (ID)
A. Heinrich       100
B. Müller         100
B. Müller         101
B. Müller         105
C. Krüger         120
C. Krüger         100

现在我想重塑数据,使行是唯一的,并将 ID 组合成一个新的列。像这样。

vorname_nachname  Pubnr (ID)
A. Heinrich       100
B. Müller         100;101;105
C. Krüger         120;100

任何人和想法?

4

1 回答 1

2

尝试分组

select vorname_nachname, 
(
    SELECT  STUFF((SELECT ';' + CAST(Pubnr AS VARCHAR(MAX)) 
    FROM    TestTable
    WHERE   vorname_nachname = t1.vorname_nachname
    FOR XML PATH('') ), 1, 1, '')
) AS Pubnr
from TestTable t1
group by vorname_nachname

SQL 小提琴演示:http ://sqlfiddle.com/#!3/d0916/1

更新:对于 JOIN,您可以使用 CTE,如下所示:

;WITH CTE AS
(
  SELECT DDR_namen.vorname_nachname, DDR_Erfinder_final.pubnr
  FROM DDR_namen
  RIGHT JOIN DDR_Erfinder_final
  ON DDR_namen.vorname_nachname=DDR_Erfinder_final.vorname_nachname

  )
select vorname_nachname, 
(
    SELECT  STUFF((SELECT ';' + CAST(Pubnr AS VARCHAR(MAX)) 
    FROM    CTE
    WHERE   vorname_nachname = t1.vorname_nachname
    FOR XML PATH('') ), 1, 1, '')
) AS Pubnr
from CTE t1
group by vorname_nachname
于 2013-11-12T10:14:38.977 回答