应该主要是直接查询以获取详细信息,然后您的报告可以根据需要汇总总计。要获得与支付相关的原始数据,可能是这样的
select
p.id,
p.name,
p.address,
p.orderNumber,
p.promoCode,
o.id as OrderID,
o.orderQuantity,
prod.sku,
prod.title,
prod.description,
prod.price
from
payments p
join order o
on p.orderNumber = o.orderNumber
join products prod
on o.productSku = prod.sku
根据注释,试图在多列模拟透视 - 固定列,但(使用原来的查询为“PQ”(Prequery)的别名,但通过订单ID具体的顺序,使线项目一起过。
select
PQ.ID,
PQ.Name,
PQ.address,
PQ.orderNumber,
PQ.promoCode,
max(if(PQ.sku = 'umbrella1212', PQ.Price, 0.00)) as Umbrella1212Price,
sum(if(PQ.sku = 'umbrella1212', PQ.OrderQuantity, 0.00)) as Umbrella1212Qty,
max(if(PQ.sku = 'umbrella1010', PQ.Price, 0.00)) as Umbrella1010Price,
sum(if(PQ.sku = 'umbrella1010', PQ.OrderQuantity, 0.00)) as umbrella1010Qty,
max(if(PQ.sku = 'rainbootlg', PQ.Price, 0.00)) as rainbootlgPrice,
sum(if(PQ.sku = 'rainbootlg', PQ.OrderQuantity, 0.00)) as rainbootlgQty,
max(if(PQ.sku = 'rubFlrmts', PQ.Price, 0.00)) as rubFlrmtsPrice,
sum(if(PQ.sku = 'rubFlrmts', PQ.OrderQuantity, 0.00)) as rubFlrmtsQty,
sum(PQ.Price * PQ.OrderQuantity) as OrderTotal
from
(select
p.id,
p.name,
p.address,
p.orderNumber,
p.promoCode,
o.id as OrderID,
o.orderQuantity,
prod.sku,
prod.title,
prod.description,
prod.price
from
payments p
join order o
on p.orderNumber = o.orderNumber
join products prod
on o.productSku = prod.sku
order by
p.id,
o.id) PQ
group by
PQ.ID,
PQ.Name,
PQ.address,
PQ.orderNumber,
PQ.promoCode
由于名称/地址/命令#/促销码将是所有相关联的项目相同的相同的“订单号”的,他们来了否则MySQL可能会唠叨关于列不是聚合函数(sum,min,max,avg等)的一部分
您是否缺少将产品与订单关联的表格?据我所知,没有办法将产品链接到订单上?此外,您所请求的输出仅适用于与订单相关联的产品数量不超过2个的情况。如果订单中有更多产品,则每个产品需要另外3列。 – GarethD