Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重塑SQL日期_Sql_Sql Server_Reshape - Fatal编程技术网

重塑SQL日期

重塑SQL日期,sql,sql-server,reshape,Sql,Sql Server,Reshape,下列问题 我正在使用命令将名称与项目编号连接起来 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 这给了我一些类似的东西(小例子) 现在我想重塑数据,这样行是唯一的,ID被合并到一个新的集合中。像这样 v

下列问题

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

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
这给了我一些类似的东西(小例子)

现在我想重塑数据,这样行是唯一的,ID被合并到一个新的集合中。像这样

vorname_nachname  Pubnr (ID)
A. Heinrich       100
B. Müller         100;101;105
C. Krüger         120;100
有人有什么想法吗?

试着像这样分组

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 Fiddle演示:

更新:对于加入,您可以使用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

不幸的是,Sql Server中没有concat聚合函数,所以这不是非常容易做到的。这可能会对你有所帮助。愚蠢的问题是,我如何告诉sql在一个新表中写这个。
;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