重塑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