使用SQL替换来模拟group-concat,但得到错误的结果

时间:2013-04-26 08:31:51

标签: sql sql-server group-concat

我有这个表有2列,ParameterID和HDFID。

ParameterID HDFID
7   1
7   2
7   3
32  1
32  3
42  1
42  2
42  3
44  1
44  2
44  3
48  1
48  2
48  3
51  1
51  2
51  3
52  1
52  2
52  3

我想把它变成

ParameterID HDFID
7           1/2/3/
32          1/3/
42          1/2/3/
44          1/2/3/
48          1/2/3/
51          1/2/3/
52          1/2/3/

但这就是我所得到的。

ParameterID HDFID
7           1/2/3/1/3/3/2/1/1/2/3/3/2/1/1/2/3/3/2/1
32          1/2/3/1/3/3/2/1/1/2/3/3/2/1/1/2/3/3/2/1
42          1/2/3/1/3/3/2/1/1/2/3/3/2/1/1/2/3/3/2/1
44          1/2/3/1/3/3/2/1/1/2/3/3/2/1/1/2/3/3/2/1
48          1/2/3/1/3/3/2/1/1/2/3/3/2/1/1/2/3/3/2/1
51          1/2/3/1/3/3/2/1/1/2/3/3/2/1/1/2/3/3/2/1
52          1/2/3/1/3/3/2/1/1/2/3/3/2/1/1/2/3/3/2/1

这是我的代码,

SELECT     ParameterID, HDFID = REPLACE
                          ((SELECT HDFID AS [data()]
                              FROM HDfParameters b
                              WHERE  b.ParameterID = ParameterID
                              ORDER BY b.ParameterID FOR xml path('')), ' ', '/')
FROM         HDfParameters
WHERE     ParameterID IS NOT NULL
GROUP BY ParameterID

1 个答案:

答案 0 :(得分:1)

您错过了内部和外部查询之间的关联。由于您的WHERE b.ParameterID = **ParameterID**没有前缀,因此实际上是b.ParameterID,因为“b”位于内部查询中。

SELECT     ParameterID, HDFID = REPLACE
                          ((SELECT HDFID AS [data()]
                              FROM HDfParameters b
                              WHERE  b.ParameterID = HDfParameters.ParameterID
                              ORDER BY ParameterID FOR xml path('')), ' ', '/')
FROM         HDfParameters
WHERE     ParameterID IS NOT NULL
GROUP BY ParameterID