Sql 有人能帮我按问题分组吗?
我有一个疑问:Sql 有人能帮我按问题分组吗?,sql,sql-server,syntax-error,Sql,Sql Server,Syntax Error,我有一个疑问: 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 tas
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
它返回以下错误:Msg 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 u business(lob)。这些表通过tc.ci_item=lob.sys_id进行连接。对于tc表上的每个dv_任务,我希望有一行在逗号分隔的字段中列出lob表中的相关ci_项。这就是为什么我尝试按DVU任务分组
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
我想要这个:
DVU任务LOB(填充字段)
123456高球。ci_项目1,lob.ci_项目2
但是,当我添加groupby时,作为一种尝试,我得到了一个错误。希望这是有道理的
谁能告诉我我做错了什么
编辑: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'
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'
我仍然不确定我用这些东西做错了什么,但我会用不同的桌子试试,看看它是如何工作的
谢谢您的帮助。我认为您不需要外部查询中的
连接:
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;
好的,我知道了,我只是把它改成这样的子字符串
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'
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'
我仍然不确定我用这些东西做错了什么,但我会用不同的桌子试试,看看它是如何工作的
谢谢您的帮助。…数据库是…?@管理员,对不起,这是Microsoft SQL Server 2016(SP2-GDR)(KB4505220)-13.0.5101.9(X64),您正在从u商业的u\u cmdb\u ci\u line\u中选择,但您正在尝试按查询不到的内容进行分组。您的分组依据的想法是什么?您是否可以编辑您的问题,以反映您希望内部SQL
返回的内容,以及当一个tc.ci_项目有多行时,或者如果有多行时,您希望发生什么情况?@Scratte,我已经添加了一个关于我正在尝试执行的操作的描述。希望它有意义。我的下一个问题是你想用东西做什么?去掉结果的第二个字符?还是我误解了这个例子是你的预期结果?您还可以提供“取出组依据”的确切SQL吗?您没有理由不能在查询中使用这些内容。