提问人:Jinesh 提问时间:11/1/2023 最后编辑:Jinesh 更新时间:11/7/2023 访问量:33
关于SQL GROUPBY的问题,并基于单个值从单个表中查找分组数据
Question on SQL GROUPBY and find grouped data from single table based on Single value
问:
我们需要 table2 作为基于 table1 的输出。 在这里,我已经上传了图像,其中 table1 是主表,table2 是实际输出,我们必须找到 IMAGE
我正在使用 MSSQL Server 2014,我尝试了 sql STUFF,但无法生成实际的 table2。 我有第一个基于主任务生成的子任务组,然后使用CR_Number droupby,但它没有在子任务后面执行主任务。 我需要在一列中CR_Number,在另一列中,我需要第一个主任务和子任务,没有对应那里有多少个主任务和子任务,但格式类似于 Maintask1(subtask1, subtask2),Maintask2(subtask1)....
答:
0赞
Nekkanti Chakradhar
11/1/2023
#1
要在 SQL 中生成所需的输出,您可以使用字符串聚合函数,如 STRING_AGG()
SELECT
CR_Number,
STRING_AGG(CONCAT(Main_Task,
CASE WHEN Subtask IS NOT NULL THEN ';' + Subtask ELSE '' END),
', ') AS TaskList
FROM Table1
GROUP BY CR_Number;
此查询将连接Main_Task和子任务,每个任务和子任务对用分号作为分隔符,用逗号作为同一CR_Number的不同任务之间的分隔符
评论
0赞
jarlh
11/1/2023
未指定 dbms 的问题的特定产品答案。至少告诉 OP 和我们其他人这是针对哪个 dbms。
0赞
Nekkanti Chakradhar
11/2/2023
提供的 SQL 语法更符合一般 SQL 标准,而不是特定于任何特定的 DBMS。使用 STRING_AGG 函数建议的方法常见于 PostgreSQL 或 SQL Server 等现代 SQL 数据库Microsoft。
0赞
Nekkanti Chakradhar
11/2/2023
如果我的回答有帮助,请批准我的回答,这将很有帮助
0赞
jarlh
11/2/2023
为了符合 ANSI/ISO SQL 标准,请使用 for concatenation,以及 .||
LISTAGG
0赞
Jinesh
11/7/2023
@NekkantiChakradhar 谢谢先生的贡献,但我无法在 MSSQL SERVER 2014 中使用 STRING_AGG() 函数,它不支持该函数。所以你能再次帮助我使用较低版本的MSSQL SERVER吗?
评论