计算每个城市一个类别的支付百分比

calculate payment percentage of one category for each city

我有这个数据库

并且我们需要计算每个城市每个类别的支付百分比 我正在尝试这样做

    select SUM(ShipQty), SUM(ShipQty)*100/(select SUM(ShipQty) from InvoiceLineitemes 
inner join Invoice on InvoiceLineitemes.InvoiceNumber=Invoice.InvoiceNumber 
inner join Customers on Invoice.SoldToCustomer=Customers.CustomerNumber group by City),
Category,city from InvoiceLineitemes
inner join Inventory on InvoiceLineitemes.ItemNumber=Inventory.ItemNumber 
inner join Invoice on InvoiceLineitemes.InvoiceNumber=Invoice.InvoiceNumber 
inner join Customers on Invoice.SoldToCustomer=Customers.CustomerNumber 
group by Category ,City

但我遇到了这个错误

消息 512,级别 16,状态 1,第 1 行 子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

据推测,您想要部分与整体的比例。这最好使用 window 函数:

select Category, city,
       sum(ShipQty),
       sum(ShipQty) * 100.0 / sum(sum(shipqty)) over (partition by city)
from InvoiceLineitemes ili join
     Inventory i
     on ili.ItemNumber = i.ItemNumber join
     Invoice inv
     on ili.InvoiceNumber = inv.InvoiceNumber join
     Customers c
     on inv.SoldToCustomer = c.CustomerNumber 
group by Category, City;

请注意,table 别名还使查询更易于编写和阅读。