2017-03-04 74 views
0

ER DIAGRAM SNAP必须为每年的2类订单查找订单金额合计。 表是SalesOrderHeader的 小计+ TaxAmt(分别是0/1直接/在线)给出了订单总额
OnlineOrderFlag如何在子查询中使用多个sum和group?

1>显示的结果在下面的格式

OrderYear   Direct    Online 

2001     75423    344344 

2002    
2003   
2004   

SQL:

select year(a.OrderDate), 

(select SUM(SubTotal+TaxAmt) FROM SalesOrderHeader b WHERE OnlineOrderFlag = 0 group by year(b.OrderDate)) as tot , 

(select SUM(SubTotal+TaxAmt) FROM SalesOrderHeader c WHERE OnlineOrderFlag = 1 group by year(c.OrderDate)) as tt 

FROM SalesOrderHeader a inner join SalesOrderHeader b 
on b.SalesOrderID = a.SalesOrderID 
      inner join 
    SalesOrderHeader c on c.SalesOrderID = a.SalesOrderID 

有人可以请电话如何进一步进行?我卡在这

2>以及如何找到它在下面的格式?

OnlineFlag    Year     TotalAmt 
Direct     2001  
Direct     2002  
Direct     2003  
Direct     2004  
Online     2001  
Online     2002  
Online     2003  
Online     2004  

回答

0

这应该有效。添加内部子查询以清楚说明组的需求,并在汇总前为每条记录添加小计和税额。

select a.year 
     ,SUM(Case when a.OnlineOrderFlag = 1 THEN a.total else null end) as Direct 
     ,SUM(Case when a.OnlineOrderFlag = 0 THEN a.total else null end) as Online 
FROM (select year(OrderDate) as year, (SubTotal+TaxAmt) as total, OnlineOrderFlag 
     from SalesOrderHeader) a 
Group by a.year 
+0

不,它显示了以下errorError代码:1248 每个派生的表必须有它自己的别名 – goonernike

+0

伟大....工作的罚款。 – goonernike

0
SELECT YEAR(ORDERDATE), ONLINEORDERFLAG, 
     SUM(SUBTOTAL) SUBTOTAL,SUM(TAXAMT) TAXAMT, 
     SUM(SUBTOTAL + TAXAMT) TOTALDUE 
FROM SALESORDERHEADER 
WHERE ONLINEORDERFLAG = 1 
GROUP BY YEAR(ORDERDATE) WITH ROLLUP 
UNION 
SELECT YEAR(ORDERDATE), ONLINEORDERFLAG, 
     SUM(SUBTOTAL) ,SUM(TAXAMT), 
     SUM(SUBTOTAL + TAXAMT) 
FROM SALESORDERHEADER 
WHERE ONLINEORDERFLAG = 0 
GROUP BY YEAR(ORDERDATE) WITH ROLLUP 
; 
+0

与拼写这一点修改这适用于第二个问题的罚款。 – goonernike