A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.
Hi @ahmed salah
Check this query:
;WITH CTE1 AS
(
SELECT *,CASE WHEN CHARINDEX(FeatureName,FeatureString)>0 AND SUBSTRING(FeatureString,CHARINDEX(FeatureName,FeatureString)+LEN(FeatureName)+1,2)='%S'
THEN CONCAT(FeatureName,'(',FeatureValue,')')
WHEN CHARINDEX(FeatureName,FeatureString)>0 AND SUBSTRING(FeatureString,CHARINDEX(FeatureName,FeatureString)+LEN(FeatureName)+1,2)<>'%S'
THEN CONCAT(FeatureName,'()')
ELSE '' END AS FeatureValueString
FROM #partsfeature
)
SELECT *,(SELECT STRING_AGG(FeatureValueString,'')WITHIN GROUP(ORDER BY FeatureValueString)
FROM CTE1 WHERE PartId = p.PartId) AS FeatureValueString
FROM #partsfeature p
If your SQL Sever don't support STRING_AGG, then try this:
;WITH CTE1 AS
(
SELECT *
,CASE WHEN CHARINDEX(FeatureName,FeatureString)>0 AND SUBSTRING(FeatureString,CHARINDEX(FeatureName,FeatureString)+LEN(FeatureName)+1,2)='%S'
THEN CONCAT(FeatureName,'(',FeatureValue,')')
WHEN CHARINDEX(FeatureName,FeatureString)>0 AND SUBSTRING(FeatureString,CHARINDEX(FeatureName,FeatureString)+LEN(FeatureName)+1,2)<>'%S'
THEN CONCAT(FeatureName,'()')
ELSE '' END AS FeatureValueString
FROM #partsfeature
),CTE2 AS
(
SELECT B.PartId,STUFF((SELECT ''+FeatureValueString FROM CTE1 A WHERE A.PartId=B.PartId Order by featureName
FOR XML PATH('')),1,0,'') AS FeatureValueString
FROM CTE1 B
GROUP BY B.PartId
)
SELECT C.PartId,P.FeatureName,P.FeatureValue,FeatureString,FeatureValueString
FROM CTE2 C INNER JOIN #partsfeature P on P.PartId=C.PartId
Best regards,
LiHong
]