实际项目中遇到的问题之SQL根据某一字段值相同合并字符串
最近在做调查问卷系统,在最后做问卷调查统计报表时遇到了个问题。经过几个小时实践,尽于得到完美解决。现将方法记录下来与大家共享,希望大家以后在工作中遇到相同问题有个参考。看问题如下:
经过几个表的拼合汇总得到如下表(下面称做“原始表”):
lngQuestionID | strCatalogTitle | strQuestionTitle | Results |
1 | 分类一 | 问题一 | 不满意0份 |
1 | 分类一 | 问题一 | 满意1份 |
1 | 分类一 | 问题一 | 一般1份 |
2 | 分类二 | 问题二 | 满意1份 |
2 | 分类二 | 问题二 | 不满意1份 |
想要的结果表如下:
lngQuestionID | strCatalogTitle | strQuestionTitle | AllResults |
1 | 分类一 | 问题一 | 不满意0份,满意1份,一般1份 |
2 | 分类二 | 问题二 | 不满意0份,满意1份 |
我用的是自定义函数的方法(应该还有别的方法),自定义函数如下: /*
功能:合并处理函数
作者:iawsky
时间:2008-03-27
使用:调查问卷高级汇总报表用
*/
ALTER FUNCTION [dbo].[fun_GetReults](@ReultColum varchar(10))
RETURNS varchar(500)
AS
BEGIN
DECLARE @ varcharReults varchar(500)
SET @varcharReults =''
SELECT @ varcharReults =@ varcharReults +','+CAST(Results as varchar)
FROM
原始表
WHERE lngQuestionID=@ReultColum
RETURN(STUFF(@varcharReults,1,1,''))
END
调用方法:
SELECT lngQuestionID,strCatalogTitle,strQuestionTitle,AllResults=dbo. fun_ GetReults (lngQuestionID) FROM
原始表
GROUP BY lngQuestionID,strCatalogTitle,strQuestionTitle
得到的就是上面要的结果表.