用于连接等价行的 SQL 查询对列求和
Posted
技术标签:
【中文标题】用于连接等价行的 SQL 查询对列求和【英文标题】:SQL Query for joining equivalent rows summing a column 【发布时间】:2021-06-24 14:23:48 【问题描述】:我有两张桌子,articolo 和 saldo。
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_breve、variante、taglia 和 giacenza 的查询。
问题是第一个表中的某些行具有相同的 desc_breve、variante 和 taglia,在这种情况下我必须将它们加入一行并在 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 查询对列求和的主要内容,如果未能解决你的问题,请参考以下文章