关于SQL GROUPBY的问题,并基于单个值从单个表中查找分组数据

Question on SQL GROUPBY and find grouped data from single table based on Single value

提问人:Jinesh 提问时间:11/1/2023 最后编辑:Jinesh 更新时间:11/7/2023 访问量:33

问:

我们需要 table2 作为基于 table1 的输出。 在这里,我已经上传了图像,其中 table1 是主表,table2 是实际输出,我们必须找到 IMAGE

我正在使用 MSSQL Server 2014,我尝试了 sql STUFF,但无法生成实际的 table2。 我有第一个基于主任务生成的子任务组,然后使用CR_Number droupby,但它没有在子任务后面执行主任务。 我需要在一列中CR_Number,在另一列中,我需要第一个主任务和子任务,没有对应那里有多少个主任务和子任务,但格式类似于 Maintask1(subtask1, subtask2),Maintask2(subtask1)....

sql-server 数据库 sql-server-2014

评论

0赞 jarlh 11/1/2023
这里的大多数人都希望示例表格数据和预期结果格式正确(没有链接,没有图像)。此外,请向我们显示您当前的查询尝试。并为您正在使用的 dbms 添加一个标签 - 以避免针对不同 dbms 的产品特定答案。

答:

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吗?