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吗?您没有理由不能在查询中使用这些内容。