我有这样的疑问:
SELECT
tc.dv_task,
tc.dv_ci_item,
STUFF((
SELECT ',' + lob.name
FROM u_cmdb_ci_line_of_business lob
where lob.sys_id = tc.ci_item
GROUP BY tc.dv_task
FOR XML PATH('') ), 1, 1, '') AS LOBs
FROM task_ci tc
INNER JOIN u_cmdb_ci_line_of_business lob on tc.ci_item = lob.sys_id它返回以下错误:消息164,级别15,状态1,行8每个GROUP BY表达式必须至少包含一列不是外部引用的列。
我使用的是Microsoft SQL Server 2016 (SP2-GDR) (KB4505220) - 13.0.5101.9 (X64)
下面是我想要完成的工作:我有两个表task_ci (tc)和u_cmdb_line_of_business (lob)。表通过tc.ci_item = lob.sys_id连接。对于tc表上的每个dv_task,我需要一行在逗号分隔的字段中列出lob表中的相关ci_items。这就是我尝试使用dv_task分组的原因。
If I take out the group by, I get this:
tc.dv_task LOBs (Stuff field)
123456 lob.ci_item 1
123456 lob.ci_item 2我想要这个: dv_task lob (材料字段) 123456 lob。ci_item 1、lob.ci_item 2
但是当我添加group by时,作为在一行中获取数据的尝试,我得到了这个错误。希望这是有意义的。
有人能告诉我我哪里做错了吗?
编辑: 03/23
好的,我明白了,我只是把它改成这样的子串
select
inc.number,
substring((select ', ' + lob.name from task_ci tc
join u_cmdb_ci_line_of_business lob on lob.sys_id = tc.ci_item
where inc.sys_id = tc.task
for XML PATH('')),2,1000) as lob_sysid
from incident inc
where inc.number = 'INC1157655'我仍然不确定我的东西做错了什么,但我会用不同的表尝试它,看看它是如何工作的。
谢谢你的帮助。
发布于 2020-03-22 03:11:38
我认为您不需要在外部查询中使用JOIN:
SELECT tc.dv_task, tc.dv_ci_item,
STUFF((SELECT ',' + lob.name
FROM u_cmdb_ci_line_of_business lob
WHERE lob.sys_id = tc.ci_item
FOR XML PATH('')
), 1, 1, '') AS LOBs
FROM task_ci tc;发布于 2020-03-25 00:09:47
好的,我明白了,我只是把它改成这样的子串
select
inc.number,
substring((select ', ' + lob.name from task_ci tc
join u_cmdb_ci_line_of_business lob on lob.sys_id = tc.ci_item
where inc.sys_id = tc.task
for XML PATH('')),2,1000) as lob_sysid
from incident inc
where inc.number = 'INC1157655'我仍然不确定我的东西做错了什么,但我会用不同的表尝试它,看看它是如何工作的。
谢谢你的帮助。
https://stackoverflow.com/questions/60790333
复制相似问题