如何将具有相同外键的多个行的数据汇总到一行?

时间:2019-08-02 09:51:47

标签: sql sql-server

我有两个表之间具有1到n的关系。一个表包含帐单(命名帐单)的一般信息 (<-1至n->) 另一个包含帐单上的项目(命名项目)。我想要一个列出所有帐单并汇总新行中项目价格的查询。但是,我当然希望每个法案只列出一次,而不是每个项目一次。

通常我什么都没张贴。但是我找不到答案,因为我不知道如何搜索这个问题。抱歉,这很明显。

我的桌子长什么样:

bill:
bill_id - customer - date

items:
item_id - bill_id - amount - price

2 个答案:

答案 0 :(得分:1)

一个简单的聚合连接应该在这里工作:

SELECT
    b.bill_id,
    COALESCE(SUM(i.price), 0) AS total_price
FROM bill b
LEFT JOIN items i
    ON b.bill_id = i.bill_id
GROUP BY
    b.bill_id;

如果要包括bill表中的其他两列,则只需将它们添加到SELECTGROUP BY子句中。

答案 1 :(得分:0)

您可以尝试这个。

   ; with cte as (
   select b.bill_id, i.item_id ,isnull(i.price,0) as Price from
   Bill as b inner join items as i on b.bill_id =i.bill_id 
   union all
   select b.bill_id , null,  sum(isnull(i.price,0)) from
   Bill as b inner join items as i on b.bill_id =i.bill_id 
   group by b.bill_id 
   )
   select * from cte order by bill_id, item_id desc