[英]SQL Server 2008 concatenate rows to column
I am using SQL Server 2008, I have a dataset that look like: 我正在使用SQL Server 2008,我有一个数据集,如下所示:
FormKey Value Category
------- ----- ------
123456 Gloves PPE
123456 Hat PPE
123456 Scalf PPE
123456 Boots PPE
987654 Glasses PPE
987654 Harness PPE
987654 Overalls PPE
I am trying to concatenate the Values and group by FormKey, so that I would end up with: 我试图通过FormKey来连接Values和group,以便最终得到:
Formkey Value Category
------- ----- -------
123456 Gloves, Hat, Scalf, Boots PPE
987654 Glasses, Harness, Overalls PPE
However, I am getting a concat of ALL of the Values for each of the Formkeys. 但是,我得到了每个Formkey的所有值的连贯表。
The code I have been using is: 我一直在使用的代码是:
SELECT frd.formresultkey AS frk
,STUFF((
SELECT ', ' + fra.value
FROM [FormResultAnswers] FRA
INNER JOIN [FormResultDetails] FRD ON FRA.[DetailKey] = FRD.[DetailKey]
INNER JOIN [FormResults] FR ON FRD.[FormResultKey] = FR.[FormResultKey]
WHERE FR.FormReference = 'PPE'
AND frd.FormElementReference = 'PPE_List'
FOR XML path('')
), 1, 1, '') AS Concatted
FROM [FormResultAnswers] FRA
INNER JOIN [FormResultDetails] FRD ON FRA.[DetailKey] = FRD.[DetailKey]
INNER JOIN [FormResults] FR ON FRD.[FormResultKey] = FR.[FormResultKey]
After this I need to update a table with the concatenated value where the Formkeys match. 之后,我需要使用Formkeys匹配的串联值更新表。 Can anyone help please? 有人可以帮忙吗?
Some modification to your query will fetch the result. 对查询的某些修改将获取结果。 Try this. 尝试这个。
SELECT FormKey,
Stuff((SELECT ',' + Value
FROM Result b
WHERE a.FormKey = b.FormKey
AND a.Category = b.Category
FOR xml path('')), 1, 1, '') value,
Category
FROM Result a
GROUP BY FormKey,
Category
You can create two function to concatenate the values, like this: 您可以创建两个函数来连接值,如下所示:
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'GroupValue'))
DROP FUNCTION GroupValue;
GO
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'GroupCategory'))
DROP FUNCTION GroupCategory;
GO
CREATE FUNCTION dbo.GroupValue (@FormKey INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @VAL VARCHAR(MAX) = '';
SELECT @VAL = @VAL + Value + ', '
FROM (SELECT DISTINCT Value
FROM YourTable
WHERE FormKey = @FormKey) AS TT
IF (LEN(@VAL) > 0)
SET @VAL = LEFT(@VAL, LEN(@VAL) - 1)
RETURN @VAL
END
GO
CREATE FUNCTION dbo.GroupCategory (@Formkey INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @VAL VARCHAR(MAX) = '';
SELECT @VAL = @VAL + Category + ', '
FROM (SELECT DISTINCT Category
FROM YourTable
WHERE FormKey = @FormKey) AS TT
IF (LEN(@VAL) > 0)
SET @VAL = LEFT(@VAL, LEN(@VAL) - 1)
RETURN @VAL
END
GO
And here's the query: 这是查询:
SELECT FormKey
,dbo.GroupValue(FormKey) AS Value
,dbo.GroupCategory(FormKey) AS Category
FROM YourTable
GROUP BY FormKey;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.