[英]MSSQL - Concat the result of a query using IN
In a MSSQL table ("username"), I have the two following records: 在MSSQL表(“用户名”)中,我具有以下两条记录:
name ¦ nickname
John Johny
Marc Marco
I'd like to do a query that would return "Johny, Marco" when I as k for the nicknames of John and Marc. 我想做一个查询,当我以John和Marc的昵称为k时返回“ Johny,Marco”。
I've tried the following: 我尝试了以下方法:
declare @consolidatedNicknames varchar(2000)
set @consolidatedNicknames = ''
select @consolidatedNicknames = @consolidatedNicknames + nickname + ';'
From username WHERE name IN ('John','Marc')
but it only returns me the nickname of 'John'. 但这只会给我起“约翰”的绰号。
How could it concat the nickname of 'John' AND 'Marc' ? 它怎么能同时冠以“约翰”和“马克”的绰号?
Many thanks. 非常感谢。
Your sample code worked as expected for me. 您的示例代码按我的预期工作。 I've had a few problems with that method with large strings (50k characters or more).
使用大型字符串(50k个字符或更多)时,该方法存在一些问题。 Here is a different version that I've found a bit more robust.
这是另一个版本,我发现它更强大。
DECLARE @consolidatedNicknames varchar(2000)
SET @consolidatedNicknames = ''
SELECT @consolidatedNicknames =
STUFF((SELECT ', ' + username.nickname
FROM username
WHERE name IN ('John','Marc')
FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)')
, 1, 2, '')
STUFF and XML are what you need. STUFF和XML是您所需要的。 Have a look at this article
看看这篇文章
Here is a function I have build to do something very similar. 这是我为执行类似操作而构建的功能。
CREATE FUNCTION [dbo].[CapOwnerList]
(
@Seperator nvarchar(100) = ','
)
RETURNS @ConcatValues TABLE
(
ID DECIMAL(28,0) NOT NULL
,VALUE NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @TempTable TABLE (ID INT, VAL VARCHAR(MAX));
INSERT INTO @TempTable (ID,VAL)
SELECT C2O.CAP_ID
,FP.NAME
FROM REL_CAP_HAS_BUS_OWNER C2O
INNER JOIN
FACT_PERSON FP
ON C2O.PERSON_ID = FP.ID
ORDER BY
FP.NAME
;
IF RIGHT(@Seperator,1)<>' '
SET @Seperator = @Seperator+' ';
INSERT @ConcatValues
SELECT DISTINCT
T1.ID
,STUFF((SELECT @Seperator + T2.VAL FROM @TempTable AS T2 WHERE T2.ID = T1.ID FOR XML PATH('')), 1, LEN(@Seperator), '') AS VALS
FROM @TempTable AS T1;
RETURN;
END
GO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.