首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有人能帮我解决一个分组问题?

有没有人能帮我解决一个分组问题?
EN

Stack Overflow用户
提问于 2020-03-22 00:29:17
回答 2查看 83关注 0票数 0

我有这样的疑问:

代码语言:javascript
复制
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分组的原因。

代码语言:javascript
复制
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

好的,我明白了,我只是把它改成这样的子串

代码语言:javascript
复制
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'

我仍然不确定我的东西做错了什么,但我会用不同的表尝试它,看看它是如何工作的。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2020-03-22 03:11:38

我认为您不需要在外部查询中使用JOIN

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2020-03-25 00:09:47

好的,我明白了,我只是把它改成这样的子串

代码语言:javascript
复制
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'

我仍然不确定我的东西做错了什么,但我会用不同的表尝试它,看看它是如何工作的。

谢谢你的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60790333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档