0

我有三个表:付款订单产品

付款表与这样爆发的订单有一个一对一的连接

付款:id、姓名、地址、payamentType、orderNumber、promoCode(促销代码在发送到订单表之前会覆盖价格)

订单:id、productSku、orderNumber、orderQuatity

产品:id、sku、标题、描述、价格、库存数量

所以我需要的是这样的(报告):

名称、地址、orderNumber、product1、product1Price、product1OrderQuantity、product2、product2Price、product2OrderQantity、totalProductCost、PromoCode等。

所以会有一些总和。

产品可能会有所不同,但我只提取适用于报告日期范围的数据,因此产品、价格、数量的 n-Tier,(agrigatefinalTotal)

这可以在复杂的查询中处理吗?

这叫什么类型的查询或函数?

我应该做一个函数吗?如果是,基本函数会是什么样子。

结果应如下所示: 在此处输入图像描述

我还应该提到 word_q_o 是按此顺序附加数量的 sku

_p_o 是这个订单的价格(我错过了最后一个,因为我很着急,但我想你明白了要点。

4

2 回答 2

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

根据评论,尝试在多个列上进行模拟 Pivot - FIXED COLUMNS THOUGH(使用原始查询的别名作为“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

由于名称/地址/订单#/促销代码对于所有关联的订单项都是相同的,具有相同的“订单号”,因此它们出现在分组依据中。否则 MySQL 可能会抱怨列不是聚合函数的一部分(sum、min、max、avg 等)

于 2013-09-30T14:23:18.113 回答
0

您必须使用 JOIN 付款与订单和订单与产品编写查询,您将获得每个不同元组(名称、订单、产品)的一行

于 2013-09-30T13:46:23.583 回答