Php MySQL pivot将一行变成一列
我有三张表,Php MySQL pivot将一行变成一列,php,mysql,sql,pivot,Php,Mysql,Sql,Pivot,我有三张表,产品,客户,订单 产品: id | name | 1 | milk | 2 | bread| 3 | Pea | 客户: id | name | category 1 | James | retailer 2 | Paul | vendor 3 | Dave | retailer 订单: id | product_id | customer_id | qty | price 1 | 1 | 2 | 23 | 50
产品
,客户
,订单
产品:
id | name |
1 | milk |
2 | bread|
3 | Pea |
客户:
id | name | category
1 | James | retailer
2 | Paul | vendor
3 | Dave | retailer
订单:
id | product_id | customer_id | qty | price
1 | 1 | 2 | 23 | 50
2 | 2 | 2 | 4 | 30
3 | 3 | 2 | 6 | 10
4 | 2 | 1 | 9 | 30
5 | 3 | 1 | 2 | 10
6 | 1 | 3 | 6 | 50
7 | 3 | 3 | 7 | 10
当我执行查询以显示类别为vendor
like的客户的交易时
从客户、产品、订单中选择customer.name、product.name作为pname、order.qty、order.price
其中customer.id=order.customer\u id
和product.id=order.product\u id和customer.category=“供应商”
我会得到类似于:
name | pname | qty | price
Paul | milk | 23 | 50
Paul | bread | 4 | 30
Paul | pea | 6 | 10
我想要这个:
name | milk | bread | pea | total
Paul | 23 | 4 | 6 | 90
name | milk | bread | pea | total
James | 0 | 9 | 2 | 40
Dave | 6 | 0 | 7 | 60
而零售商的情况将如下所示:
name | pname | qty | price
James | bread | 9 | 30
James | pea | 2 | 10
Dave | milk | 6 | 50
Dave | pea | 7 | 10
选择customer.name、product.name作为pname、order.qty、order.price FROM
顾客、产品、订单
其中customer.id=order.customer\u id
和product.id=order.product\u id和customer.category=“零售商”
我会得到一张这样的桌子:
name | pname | qty | price
James | bread | 9 | 30
James | pea | 2 | 10
Dave | milk | 6 | 50
Dave | pea | 7 | 10
但是我想要这个:
name | milk | bread | pea | total
Paul | 23 | 4 | 6 | 90
name | milk | bread | pea | total
James | 0 | 9 | 2 | 40
Dave | 6 | 0 | 7 | 60
我认为你不能直接从一个简单的选择中得到这个响应结构
name | milk | bread | pea | total
James | 0 | 9 | 2 | 40
Dave | 6 | 0 | 7 | 60
因为您的数据库正在获取每个零售商/客户订单的一行
我知道,使用PHP或Java等服务器语言,您可以处理数据并检索所需的数据。只需使用条件聚合来旋转列即可。并且一定要使用显式连接,而不是不推荐使用的隐式连接,因为在ANSI-92中,隐式连接已经是25年来的标准
选择c.name,
总和(当p.name=‘milk’时,则为o.qty,否则为0结束)作为milk,
总和(当p.name=面包时,则为o.qty,否则为0结束)作为面包,
总和(当p.name='pea'然后o.qty否则0结束时的情况)为pea,
总金额(o.价格)
从'customer'c
内部联接'order'o
在c.id=o.customer\u id上
内连接`product`p
在p.id=o.product\U id上
其中c.category=‘供应商’——与零售商相同
按c.name分组
相关:太棒了!正是我需要的。谢谢