用于连接等价行的 SQL 查询对列求和

Posted

技术标签:

【中文标题】用于连接等价行的 SQL 查询对列求和【英文标题】:SQL Query for joining equivalent rows summing a column 【发布时间】:2021-06-24 14:23:48 【问题描述】:

我有两张桌子,articolosaldo

articolo 是这样的:

id desc_breve variante taglia
338673 ANYT229 00109 XL
338674 ANYT229 00109 XL
338675 ANYT229 00109 XXL
338711 MYP506S 00002 56
338712 MYP506S 00002 58
338713 MYP506S 00002 60
338714 MYP506S 00002 60
338715 MYP506S 00002 62

saldo(省略主键id)是这样的:

id_articolo giacenza
338673 12.0000
338674 13.0000
338675 23.0000
338711 2.0000
338712 5.0000
338713 1.0000
338714 8.0000
338715 8.0000

我需要从 articolo 中的 id 字段和 saldo 中的 id_articolo 字段连接这两个表使用返回 desc_brevevariantetagliagiacenza 的查询。

问题是第一个表中的某些行具有相同的 desc_brevevariantetaglia,在这种情况下我必须将它们加入一行并在 saldo 表中对它们各自的 giacenza 字段求和。

可以查询吗?我正在使用 Microsoft SQL Server。

【问题讨论】:

请不要标记您不使用的 RDBMS。 能否为您的示例数据提供所需的输出 如果您需要将多行合并为一个...您如何“总结”taglia 【参考方案1】:

您似乎在用group by 描述join

select a.desc_breve, a.variante, a.taglia, sum(s.giacenza)
from articolo a join
     saldo s
     on s.id_articolo = a.id
group by a.desc_breve, a.variante, a.taglia;

【讨论】:

【参考方案2】:
SELECT * 
FROM
articolo AS A INNER JOIN saldo AS S ON A.id = S.id_articolo

这将为您提供单个结果集中的所有内容。现在从这里开始有点棘手,因为要通过 A.desc_breve 列与 SUM(某个列的 A 或 B)对结果进行 GROUP,您将无法包含 id_articolo 列,因为这需要在一些方式,要么通过组污染 id,或者如果它们在输出中没有用,则直接丢弃它们。

SELECT tmp.desc_breve, SUM(whatever you are doing)
FROM (query above, include the surrounding brackets) AS tmp
GROUP BY tmp.desc_breve;

【讨论】:

以上是关于用于连接等价行的 SQL 查询对列求和的主要内容,如果未能解决你的问题,请参考以下文章

使用子查询对列的值求和

SQL:按日期分组并对列中的值求和

跨行的 SQL 求和

SQL Server:对列的每个组值求和(或差),直到在另一列上满足条件

使用相同的 ID 列递增地对列值求和

SQL连接和条件求和