原表:
[ID][ID1] [fName] [fValue]
1 12 语文 80
1 12 英语 70
1 12 数学 50
1 13 数学 90
2 12 物理 85
2 12 语文 85
3 13 数学 92
3 12 物理 82
4 12 数学 60
合并后
[ID][ID1] [Value]
1 12 语文(80)英语(70)
1 13 数学(90)
2 12 物理(85)语文(85)
3 13 数学(92)
3 12 物理(82)
4 12 数学(60)
因为上面表是我用临时表组成的再来合并的,我知道用函数可以实现,但是函数中好像不能使用临时表。具体需求就是把ID和ID1想同的行的列[fname]和[fValue]两列(这里可能有多列,同时列可以还有判断,比如说成绩不合格的不显示,像1 12 数学不合格,就是说合并列时有判断的)合并成一个列[Value],在下试过很多方法都无法实现,希望高手能给个脚本谢谢!
-----------------------------------------------------------------以下为邹建的解法
SELECT
oid = IDENTITY(int, 1, 1),
id, id1, value = CONVERT(nvarchar(4000), RTRIM(fname) + QUOTENAME(fvalue, '()'))
INTO #1
FROM #
WHERE [fValue] >= 60
ORDER BY id, id1
DECLARE @id int, @id1 int, @value nvarchar(4000)
UPDATE A SET
@value = CASE WHEN @id = ID AND @id1 = ID1 THEN @value + N' ' + value ELSE value END,
value = @value,
@id = ID, @id1 = ID1
FROM #1 A
SELECT id, id1, value FROM #1 A
WHERE NOT EXISTS(
SELECT * FROM #1
WHERE ID = A.ID AND ID1 = A.ID1 AND oid > A.oid)
DROP TABLE #1