我无法编写需要以下内容的查询:
我有4个游戏产品表:
表1(足球)
PRODUCT_NAME
SoccerBall
SoccerShoes
SoccerShins
表2(板球)
PRODUCT_NAME
CricketBall
CricketStumps
CricketBat
表3(橄榄球)
PRODUCT_NAME
篮球
表4(乒乓)
PRODUCT_NAME
Pingpongball
我还有一个表格可以产生所有产品的收入,如下所示:
表5
Userid OrderSno Product_Name OrderTime Revenue
123 66243 CricketBall 12Jan2012 35
123 66553 CricketBat 15June2013 60
123 36476 SoccerBall 15Dec2013 15
结果表应该是这样的:
Ordertime(排序)板球(3个月)板球(6个月)板球(终身)
12Jan2012 0 0 0
15June2013 0 0 35
2013年12月15日0 60 95(60 + 35)
足球(3个月)足球(6个月)足球(终身)
0 0 0
0 0 0
0 0 0
上表列出了在购买特定产品之前购买的每件产品所产生的收入。这基于orderdate / time sorted。 例如:用户123发出的第一个订单是在2012年1月12日。因此,用户之前没有购买任何东西,因为这是他的第一个订单。因此,结果表的第一行应为0。 来到第二排,他做的第二次购买是在2013年6月15日。因此,结果表应包含第二个订单之前相应产品类型的所有收入。因此,在这种情况下,35将在Cricket字段下面(因为Product_name属于Cricket表)并且它将落入Lifetime字段。这是因为订单购买日期是2013年6月15日。所以3个月前没有购买任何东西。同样在此日期前6个月没有购买任何东西。但是在购买Cricket Ball之前1年或更长时间内产生了35的收入。因此35的值应该根据板球的Product_Name落入Cricket的Lifetime领域。
所有产品都应该发生同样的事情。我知道查询很复杂,我不确定这是否可行。由于我对此有任何帮助,我将不胜感激。
答案 0 :(得分:0)
嗯,我不确定这究竟是你想要的,但我认为它的工作看一看。如果你想要一张桌子上的所有运动,联盟就会这样做。
Select Product_Name
,YEAR(ordertime)
,SUM(case when MONTH(ordertime) in (1,2,3) then revenue else 0 end) 'Q1'
,SUM(case when MONTH(ordertime) between 1 and 6 then revenue else 0 end) 'Q2'
,SUM(case when MONTH(ordertime) between 1 and 9 then revenue else 0 end) 'Q3'
,SUM(revenue) 'Q4'
from PingPong
group by Product_Name, YEAR(ordertime)