代码之家  ›  专栏  ›  技术社区  ›  user3127554

选择所有列值作为总计并将其相乘

  •  0
  • user3127554  · 技术社区  · 6 年前

    这是我的数据库结构:

    发票联

    • 身份证件

    • 单位

    发票线

    • 线型的

    • 数量

    • 价格

    以下是我的行:

    Invoice
    ID  Company
    1   XYZ
    2   ZYX
    
    InvoiceLine
    LineID  InvoiceID   quantity    price
    1       1           1           10
    2       1           5           10
    
    3       2           1           20
    

    我尝试生成的是动态选择我的总发票价格:

    理想结果

    1 XYZ 60
    2 ZYX 20
    

    我对此使用以下查询:

    select ID, cil.quantity * cil.unitPrice as invoiceTotal from Invoice ci
    join InvoiceLine as cil on ci.invoiceID = cil.invoiceID 
    

    问题是,此查询为第一张发票返回2行。

    为什么是这样?我如何选择发票行的所有值?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    你想要 group by :

    select ci.id, sum(cil.quantity * cil.unitPrice) as invoiceTotal
    from Invoice ci join
         InvoiceLine cil
         on ci.invoiceID = cil.invoiceID 
    group by ci.id;
    

    但是,你甚至不需要 join 以下内容:

    select cil.id, sum(cil.quantity * cil.unitPrice) as invoiceTotal
    from InvoiceLine cil
    group by cil.id;
    
        2
  •  1
  •   Usman Asif    6 年前
        select Invoice.id,Invoice.Company sum(InvoiceLine.quantity * InvoiceLine.unitPrice) as TotalSum
        from Invoice join
             InvoiceLine cil
             on Invoice.invoiceID = InvoiceLine.invoiceID 
        group by Invoice.id,Invoice.Company
    
    order by Invoice.Company ;