非常困扰人心的问题

时间:2023-01-28 14:46:51
有三个表, 
订单产品表(ProductOrderItem) 
字段标题 字段名称 数据属性 
Id标记    productorderitemid 主键 
orderid    orderid      varchar 
产品id    productid int 
总库产品id  merchandiseid int 
供货商id    providerid int 
产品通用名称 productname varchar 


无效订单原因表(orderInvalid) 
字段标题 字段名称 数据属性 
Id标记 orderInvalidid 自动增值int 
订单编号 orderid int 
无效原因 InvalidContent varchar 
提交时间 createtime datetime 

产品购买表(ProductOrder)
字段标题 字段名称          数据属性
ID标记 orderid          自动增值id
购买时间 paytime          datetime
产品名称 productname varchar
产品ID productid  int
价格 price          float

我想做一个查询实现以下功能:谢谢各位大侠 

商品名称    单个产品无效订单数                   无效原因                    单个产品总订单数(无效订单数比例)
                            缺货          快递不支持    顾客联系不上       
仙卡疤痕敌     37            30              5            2                              74(1/2)

好迪           25            20              5            0                              75(1/3)
要求就是要在一个JSP页面实现上面这个功能。按照商品名统计无效订单数,及各种 无效原因的无效订单数,设计三个表关联查询及子查询,谢谢啊 


我的代码是:
select B.productname as '商品名称',
count(a.orderInvalidid) as 无效订单总数 ,
Sum(Case when A.InvalidContent='缺货' then 1  else 0 end ) as '缺货' ,
Sum(Case when A.InvalidContent='快递不支持' then 1  else 0 end) as '快递不支持' ,
Sum(Case when A.InvalidContent='顾客联系不上' then 1  else 0 end) as '顾客联系不上' ,
Sum(Case when A.InvalidContent='价格原因' then 1  else 0 end) as '价格原因',
Sum(Case when A.InvalidContent='未付款' then 1  else 0 end) as '未付款',
Sum(Case when A.InvalidContent='重复拍单' then 1  else 0 end) as '重复拍单',
Sum(Case when A.InvalidContent='拒收' then 1  else 0 end) as '拒收',
(select count(D.orderid) from productorder C Inner join ProductOrderItem D
on C.orderid =D.orderid) as 订单总数
from orderInvalid A Inner join ProductOrderItem B
on A.orderid =B.orderid  group by B.productname


测试结果是:
(典舒)复方妥布霉素滴眼液 1 1 0 0 0 0 0 0 8356
(尔可芬)复方沙芬那敏糖浆 1 1 0 0 0 0 0 0 8356
(纷乐)硫酸羟氯喹片 1 0 0 0 0 1 0 0 8356
(康肤倍)咪康唑氯倍他索乳膏 1 0 0 0 0 1 0 0 8356
(立健亭)复方磷酸可待因溶液 1 1 0 0 0 0 0 0 8356
(美尔凯)奥硝唑栓 1 1 0 0 0 0 0 0 8356
(奇莫欣)胸腺肽肠溶片 1 0 0 0 0 1 0 0 8356
(泰利必妥)氧氟沙星滴耳剂 1 1 0 0 0 0 0 0 8356
/萘敏维滴眼液 1 1 0 0 0 0 0 0 8356
701跌打镇痛膏 1 0 0 0 1 0 0 0 8356
8普适泰片(舍尼通) 1 1 0 0 0 0 0 0 8356
AD钙镁肝油片 1 1 0 0 0 0 0 0 8356
E痘清 1 0 0 0 0 1 0 0 8356
阿达帕林凝胶 1 0 0 0 0 1 0 0 8356
阿德福韦酯片 1 0 0 0 0 0 0 0 8356
阿归养血糖浆 1 0 0 0 0 1 0 0 8356
阿咖酚散(头痛粉) 2 0 0 0 0 0 2 0 8356
阿米卡星洗剂 1 0 1 0 0 0 0 0 8356
阿莫西林胶囊 2 0 0 0 0 2 0 0 8356
艾附暖宫丸 3 1 0 0 0 2 0 0 8356

存在问题:(select count(D.orderid) from productorder C Inner join ProductOrderItem D
on C.orderid =D.orderid) as 订单总数 ,结果都是8356,请高手帮小弟纠错,谢谢~

6 个解决方案

#1


非常困扰人心的问题

#2


好长

#3


關注+學習

#4


(select count(D.orderid) from productorder C Inner join ProductOrderItem D 
on C.orderid =D.orderid and ---这个地方还要加和另外的表的关联(orderInvalid,ductOrderItem) 

) as 订单总数 

#5


引用 4 楼 jinjazzli 的回复:
SQL code(selectcount(D.orderid)from productorder CInnerjoin ProductOrderItem Don C.orderid=D.orderidand---这个地方还要加和另外的表的关联(orderInvalid,ductOrderItem)
)as 订单总数

请问怎么加呢?能详细写一下吗

#6


要加where 条件
如:
where c.某字段=a.某字段 

#1


非常困扰人心的问题

#2


好长

#3


關注+學習

#4


(select count(D.orderid) from productorder C Inner join ProductOrderItem D 
on C.orderid =D.orderid and ---这个地方还要加和另外的表的关联(orderInvalid,ductOrderItem) 

) as 订单总数 

#5


引用 4 楼 jinjazzli 的回复:
SQL code(selectcount(D.orderid)from productorder CInnerjoin ProductOrderItem Don C.orderid=D.orderidand---这个地方还要加和另外的表的关联(orderInvalid,ductOrderItem)
)as 订单总数

请问怎么加呢?能详细写一下吗

#6


要加where 条件
如:
where c.某字段=a.某字段