我有三张桌子: 支付 命令 产品
付款表与订单之间有一对一的manay连接,就像这样突破
付款:id,name,address,payamentType,orderNumber,promoCode(promocodes在发送到订单表之前覆盖价格)
订单:id,productSku,orderNumber,orderQuatity
产品:id,sku,title,description,price,inventoryQuantity
所以我需要的是这样的(报告):
name,address,orderNumber,product1,product1Price,product1OrderQuantity,product2,product2Price,product2OrderQantity,totalProductCost,PromoCode等。
所以会有一些总和。
产品可能有所不同,但我只提取适用于报告日期范围的数据,因此n-Tier关于产品,价格,数量,(aggrigatefinalTotal)
这可以在复杂的查询中处理吗?
这叫什么类型的查询或函数?
我应该做一个函数,如果是,那么基本函数会是什么样的。
结果应如下所示:
我还应该提到word_q_o是sku,按此顺序附加数量
和_p_o是这个订单的价格(我错过了最后一个,因为我很匆忙,但我认为你得到了要点。
答案 0 :(得分:1)
主要是直接查询以获取详细信息,然后您的报告可以根据需要汇总总计。获取与付款相关的原始数据可能类似于
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”(预查询),但特别按订单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
由于名称/地址/订单#/ promocode对于相同“订单号”的所有关联订单项都是相同的,因此它们会在组中出现。否则MySQL可能会唠叨列不是聚合函数的一部分(sum,min,max,avg等)
答案 1 :(得分:0)
您必须使用带有订单的JOIN付款和带有产品的订单编写查询,并且每个不同的元组(名称,订单,产品)将获得一行