在SQL函数

时间:2016-03-03 14:50:27

标签: sql-server tsql

我需要在表格的第二列内搜索。我在SQL中使用STUFF函数将所有LastNames与相同的FirstName组合在一起。所以这是我的疑问:

SELECT a.FirstName, 
STUFF(
(SELECT N', ' + b.LastName 
FROM NameChange b 
WHERE a.NameID = b.NameID 
FOR XML PATH (''),TYPE).value('text()[1]','nvarchar(max)'),1,2,N'')
 AS 'LastNames' 
FROM Names a ORDER BY a.FirstName

以上查询的工作方式与我想要的方式相同。但是,当我添加WHERE子句(ORDER BY之前)时,我收到一条错误消息

  

无效的列名称' LastNames'

我试过这几种方式。我尝试过b.LastNameLastName[LastName]LastNamesb.LastNames[LastNames]b.[LastName]和{ {1}}

我不知道还有什么可以尝试让它发挥作用。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

执行此操作的一种简单方法是将查询放入cte。

with MyNames as
(
    SELECT a.FirstName, 
    STUFF(
    (SELECT N', ' + b.LastName 
    FROM NameChange b 
    WHERE a.NameID = b.NameID 
    FOR XML PATH (''),TYPE).value('text()[1]','nvarchar(max)'),1,2,N'')
     AS 'LastNames' 
    FROM Names a 
)

select *
from MyNames n
where LastNames = 'Some Name' 
ORDER BY n.FirstName