SQL CONCAT IF语句?

时间:2012-03-12 11:24:49

标签: sql sql-server-2005 tsql if-statement sql-server-group-concat

早上好,

我不确定我需要如何解决以下查询...我有以下查询,它会在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'列...

之外,它基本上都是重复记录

Results_image

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

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

非常感谢提前。如有任何疑问,请随时询问。

此致 贝蒂

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