早上好,
我不确定我需要如何解决以下查询...我有以下查询,它会在SQL服务器中拉回所需的记录...
SELECT agenda.AgendaItemNumber,Agenda.AgendaName, AgendaType.AgendaTypeDescription, userdetails.fullName
FROM Agenda
JOIN AgendaType ON AgendaType.AgendaTypeID=Agenda.AgendaTypeID
JOIN UserDetails ON Agenda.AgendaID = Userdetails.AgendaID
WHERE agenda.AgendaTypeID = '2'
AND AgendaItemNumber = AgendaItemNumber
AND AgendaName = AgendaName
AND AgendaTypeDescription = AgendaTypeDescription
AND AgendaItemNumber >= '3'
以上查询有效但我需要稍微增强一点。它会回退以下结果,除了'fullname'列...
之外,它基本上都是重复记录
我想要做的是能够为此查询添加一些额外的代码,以便当我运行查询时,我能够为每个'AgendaItemNumber'显示一条记录,并为此连接两个全名记录。但是我在这个表中有额外的AgendaItemsNumbers只分配了1个用户全名。它只是图像文件中的这几条记录,我需要做一些聪明的事情。
也许有更好的方法来完成这项任务?
非常感谢提前。如有任何疑问,请随时询问。
此致 贝蒂
答案 0 :(得分:4)
SELECT agenda.AgendaItemNumber,
Agenda.AgendaName,
AgendaType.AgendaTypeDescription,
STUFF(( SELECT ';' + FullName
FROM UserDetails
WHERE UserDetails.AgendaID = Agenda.AgendaID
FOR XML PATH('')
), 1, 1, '') AS fullName
FROM Agenda
INNER JOIN AgendaType
ON AgendaType.AgendaTypeID=Agenda.AgendaTypeID
INNER JOIN UserDetails
ON Agenda.AgendaID = Userdetails.AgendaID
WHERE agenda.AgendaTypeID = '2'
AND AgendaItemNumber = AgendaItemNumber
AND AgendaName = AgendaName
AND AgendaTypeDescription = AgendaTypeDescription
AND AgendaItemNumber >= '3'
<强> ADENDUM 强>
SQL-Server中的XML扩展允许您将多行连接成一行。扩展的实际意图是你可以输出为XML(显然),但有一些漂亮的技巧是扩展的副产品。在上面的查询中,如果子查询(FullName)中有一个列名,它将输出为<FullName>Joe Bloggs1</FullName><FullName>Joe Bloggs2</FullName>
,因为没有列名,它只是简单地连接行(没有形成正确的XML)。 PATH
部分允许您指定其他节点,例如,如果您在上面使用PATH('Name'),您将得到<Name>;Joe Bloggs</Name><Name>;Joe Bloggs2</Name>
如果您将Path与列名组合,您将得到Joe Bloggs
最后,STUFF
只删除列表开头的分号。