1

大家早,

我不确定我需要如何解决我的以下查询...我有以下查询可以拉回 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'

上面的查询有效,但我需要稍微增强一下。它拉回了以下结果,除了“全名”列之外,这些结果基本上是重复的记录......

Results_image

我想做的是能够向这个查询添加一些额外的代码,这样当我运行查询时,我能够为每个“AgendaItemNumber”显示一条记录,并连接这条记录的两个全名。但是,我在此表中有其他 AgendaItemsNumbers,仅分配了 1 个用户全名。它只是图像文件中的这几条记录,我需要做一些聪明的事情。

也许有更好的方法来完成这项任务?

提前谢谢了。如有任何疑问,请不要犹豫。

问候贝蒂

4

1 回答 1

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'

附录

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只是删除列表开头的分号。

于 2012-03-12T11:35:43.000 回答