如题:
SELECT (SELECT AchievementsID FROM dbo.PerformanceAchievements WHERE MainID=a.MainID)[AchiecementsID],*
FROM dbo.PerformanceMain a WHERE PerformanceYear=2012 AND a.MainID='0B57109A-9290-4721-884A-005167613320'
执行结果:
消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
其中:
SELECT AchievementsID FROM dbo.PerformanceAchievements WHERE MainID=a.MainID
查询结果:
EBE0C1C1-6B32-441E-8E7B-3461318C7225
0F67E722-4BC2-4E84-A3AB-B01FE80AACEA
ACD2E55F-CE54-477B-9D12-C483D37C2720
DA38C999-7FCC-4406-9EFB-E5820C2A8559
5456EEB7-3B6F-473D-8ACD-FD68CB089E01
最终想要结果:将查询的结果拼接成一行一列用分割符隔开
现在想写个通用的函数,可是目前貌似无法表达。
那种sql for xml raw,elements 想了下实现不了
函数:Func(字段名,分割符号)
最终理想状态:
SELECT Func(AchievementsID,',') FROM dbo.PerformanceAchievements WHERE MainID=a.MainID
这个与问题无关
@like%'远远'%: 使用游标循环不能拼接你的字符串?
可以先定义一个变量
declare @str varchar(max)
SELECT @str=@str + AchievementsID+',' FROM dbo.PerformanceAchievements WHERE MainID=a.MainID
declare @str varchar(MAX)
set @str=''
select @str=@str+','+Cast([CardNo] as varchar(20)) from [MemeberCard]
select RIGHT(@str,LEN(@str)-1) as CardNos
那这个就不能写成通用的了,需求是 从表中所有字段都需拼接
这个可以实现,我查的是用户表,还有一个是用户和用户的关系表,是个一对多的关系
就是一个用户,然后跟了他管了哪些人,可以实现,不懂可以问我
SELECT TOP 10 * FROM ( SELECT UserName , Account FROM frmuser ) A OUTER APPLY ( SELECT [usernames] = REPLACE(REPLACE(REPLACE(( SELECT ControlAccount AS value FROM permuserrelation N WHERE CurrentAccount = A.account FOR XML AUTO ), '"/><N value="', '/'), '<N value="', ''), '"/>', '') ) N