2017-03-04 75 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