计算每个城市一个类别的支付百分比
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 别名还使查询更易于编写和阅读。
我有这个数据库
并且我们需要计算每个城市每个类别的支付百分比 我正在尝试这样做
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 别名还使查询更易于编写和阅读。