一个行列合并问题

原表:
[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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值