博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SQL SERVER 用sql语句将一列数据拼接成一个字符串和行转列

Posted on 2015-04-29 11:22  first_start  阅读(1082)  评论(0)    收藏  举报
执行
SELECT userid FROM userinfo
 
得到
1
2
3
4
 
如果要得到
1,2,3,4
 
执行方案1
DECLARE @STR VARCHAR(8000)
SELECT @STR=ISNULL(@STR+',','')+userid FROM (SELECT DISTINCT userid FROM userinfo)AS T
SELECT @STR
 
执行方案2
declare @output varchar(8000)
select @output = coalesce(@output + ',' , '') + userid from userinfo
print @output
 
 ------------------------------------------------------------------------------------------------------------------------
 

select *,datediff(day,要求交图日期,生产技术确认日期) as 拖期天数 from
(
select a.Filename,v.VariableName,vv.ValueText
from Vw_VariableValueNew as vv
left join Documents as a on vv.DocumentID = a.DocumentID
left join Variable as v on v.VariableID = vv.VariableID and
v.VariableName in(N'制造编号',N'机名',N'客户',N'图纸代号',N'图纸名称',N'版本',N'负责人',N'要求交图日期',N'制图人',N'实际出图日期',N'交图确认人',N'交图确认日期',N'生产技术确认人',N'生产技术确认日期',N'生产管理确认人',N'生产管理确认日期')
where vv.DocumentID = 4051 and vv.ConfigurationID = 2 --and vv.RevisionNo = 1
) as hzl

PIVOT
(
max(hzl.ValueText)
FOR hzl.VariableName in([制造编号],[机名],[客户],[图纸代号],[图纸名称],[版本],[负责人],[要求交图日期],[制图人],[实际出图日期],[交图确认人],[交图确认日期],[生产技术确认人],[生产技术确认日期],[生产管理确认人],[生产管理确认日期])
) as t
where 生产技术确认日期 between REPLACE('2015-04-01','/','-') and REPLACE('2015-04-29','/','-') ;

 
 

总报错"'PIVOT' 附近有语法错误。您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能"
遇到这个错误,执行如下过程,将myDatabaseName替换成目标数据库即可

exec sp_dbcmptlevel myDatabaseName,90