日期:2014-05-19  浏览次数:20508 次

表中有一列的数据有重复的数据,能否把这个表变成另外的形式
有一个表,其中也只有一列的数据是有重复的,如下
表   a
1       12
2       12
3       13
4       14
可以可以转换成下面的形式
1,2     12                             1+2   12
3           13         或者             3         13
4           14                             4         14
就是把有重复数据的行进行合并,使得原来有重复数据的列不重复,但其他列的数据也不能丢。

------解决方案--------------------
使用用户定义函数,配合SELECT处理完成字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a ',1
UNION ALL SELECT 'a ',2
UNION ALL SELECT 'b ',1
UNION ALL SELECT 'b ',2
UNION ALL SELECT 'b ',3
GO

--合并处理函数
CREATE FUNCTION dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re= ' '
SELECT @re=@re+ ', '+CAST(col2 as varchar)
FROM tb
WHERE col1=@col1
RETURN(STUFF(@re,1,1, ' '))
END
GO

--调用函数
SELECT col1,col2=dbo.f_str(col1) FROM tb GROUP BY col1
--删除测试
DROP TABLE tb
DROP FUNCTION f_str
/*--结果
col1 col2
---------- -----------
a 1,2
b 1,2,3
--*/
GO

/*==============================================*/
------解决方案--------------------
1、RETURNS varchar(100)这个语句什么作用啊怎么是100不是10啊

2、SELECT @re=@re+ ', '+CAST(col2 as varchar)-- 这句话中CAST是什么意思?

3、STUFF(@re,1,1, ' '))-- 中STUFF是什么意思?
===========================================
1、在你的这个程序里,10也是可以的,他是控制输出的字符长度,要按你输出的最多考虑
2、CAST是类型转换,建议查MSDN
3、STUFF,查MSDN