求一条产品销售量,包括产品属性参数的sql语句

小孩快跑 2014-04-01 08:27:00
第一步:现有数据如下,ProductId产品id, OrderId代表订单编号,ShipmentQuantity该产品的该订单的销售量,ValueId产品所属参数id, ValueStr产品参数名称,
ProductId OrderId ShipmentQuantity ValueId ValueStr ProductName

45 201403306241956 1 72 M 产品1
48 201402195799492 2 73 L 产品2
48 201403306241956 2 75 XXL 产品2
48 201402195799492 2 92 灰色 产品2
48 201403306241956 2 94 黑色 产品2
45 201403306241956 1 99 咖啡色 产品1

(备注:属性不止这两个)
我的目的就是把以上数据,统计出每个产品不同属性参数搭配的的总销售量,比如
产品1 统计出来的就是
产品id 销售数量 产品名称 属性参数 属性参数名称
45 1 产品1 72 ,99 M,咖啡色

而产品2 统计出来的数据(这个产品有多条,因为有多种属性参数搭配)
产品id 销售数量 产品名称 属性参数 属性参数名称
48 2 产品2 73 ,92 L,灰色
48 2 产品2 75 ,94 XXL,黑色

最后再把每个产品的销售数量加起来得到最后的结果,
48 2 产品2 73 ,92 L,灰色
48 2 产品2 75 ,94 XXL,黑色
45 1 产品1 72 ,99 M,咖啡色

如果可能,请大神把属性也搞出来
48 2 产品2 73 ,92 尺码: L,颜色:灰色
48 2 产品2 75 ,94 尺码:XXL,颜色:黑色
45 1 产品1 72 ,99 尺码: M,颜色:咖啡色



...全文
272 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
盖伦兄嘚 2016-11-11
  • 打赏
  • 举报
回复
sql有问题,商品数量为0的统计不出来好像
yoan2014 2014-04-02
  • 打赏
  • 举报
回复
引用 5 楼 Junior_yuan 的回复:
我先说一下我的思路,我先把每个订单的每个产品参数全部可能搭配查询出来,然后把属性参数行转列(group by orderid),再通过再把所有的产品相同的属性参数distinct,sum(数量)。不知道我的思路行不,如果行,麻烦大婶们,赐教一下代码
如果你僅僅是想得出你要的結果,將sum改成avg即可
yoan2014 2014-04-02
  • 打赏
  • 举报
回复
你這個架構會給你帶來很多的問題,屬性不同應該要編訂新的料號
shinger126 2014-04-02
  • 打赏
  • 举报
回复
不管是服装还是鞋帽,都没这么玩的。
shinger126 2014-04-02
  • 打赏
  • 举报
回复
楼主,你的这个需求很扯蛋啊
小孩快跑 2014-04-02
  • 打赏
  • 举报
回复
引用 9 楼 yoan2014 的回复:
[quote=引用 5 楼 Junior_yuan 的回复:] 我先说一下我的思路,我先把每个订单的每个产品参数全部可能搭配查询出来,然后把属性参数行转列(group by orderid),再通过再把所有的产品相同的属性参数distinct,sum(数量)。不知道我的思路行不,如果行,麻烦大婶们,赐教一下代码
如果你僅僅是想得出你要的結果,將sum改成avg即可[/quote] 平均数,到时候数据一多,就不对了吧!!
小孩快跑 2014-04-01
  • 打赏
  • 举报
回复
我先说一下我的思路,我先把每个订单的每个产品参数全部可能搭配查询出来,然后把属性参数行转列(group by orderid),再通过再把所有的产品相同的属性参数distinct,sum(数量)。不知道我的思路行不,如果行,麻烦大婶们,赐教一下代码
小孩快跑 2014-04-01
  • 打赏
  • 举报
回复
举个例子 48 4 产品2 73,92 L,灰色 这一条就不可能销售数量为4啊,这一条的销售数量是2才对。看一下我要的数据
小孩快跑 2014-04-01
  • 打赏
  • 举报
回复
1楼的大神,数量不对了啊!
yoan2014 2014-04-01
  • 打赏
  • 举报
回复
而产品2 统计出来的数据(这个产品有多条,因为有多种属性参数搭配) 不知道你所说的多种属性参数搭配是否是说不同的orderid有不同的参数搭配,如果是的话就是上面的答案了
yoan2014 2014-04-01
  • 打赏
  • 举报
回复
if exists(select name from sys.objects where name = 'test')
	drop table Test
go
CREATE	table	test(
productid int , orderid nvarchar(40) , shipmentquantity int , 
valueid nvarchar(10) , valuestr nvarchar(10) , productname nvarchar(20)
)

insert into test
select '45', '201403306241956', 1,'72',N'M',N'产品1' union ALL 
select '48','201402195799492',  2, '73',N'L',N'产品2' union all
select '48','201403306241956', 2 , '75',N'XXL',N'产品2' union ALL
select '48','201402195799492', 2, '92',N'灰色',N'产品2'union all
select '48','201403306241956', 2,'94',N'黑色',N'产品2' union all                                                                                                                                                                                       
select '45','201403306241956',1 ,'99',N'咖啡色',N'产品1'


----执行语句--------------------- 
select a.productid , sum(a.shipmentquantity) as 数量, a.productname , 
stuff(( SELECT
      ',' + b.valueid 
FROM test AS b
WHERE b.productid = a.productid
AND a.orderid = b.orderid
FOR xml PATH ('')), 1,1,'') as 属性参数,
stuff(( SELECT
	',' + b.valuestr
FROM test AS b
WHERE b.productid = a.productid
AND a.orderid = b.orderid
FOR xml PATH ('')), 1,1,'') as 属性参数名称
from test as a
group by productid ,productname,a.orderid


/*
productid   数量          productname          属性参数    属性参数名称
----------- ----------- -------------------- ----------- ------------------------------------
45          2           产品1                  72,99      M,咖啡色
48          4           产品2                  73,92      L,灰色
48          4           产品2                  75,94      XXL,黑色

(3 行受影响)
*/

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧