2017-03-04 10 views
0

ER DIAGRAM SNAP各年の2種類の注文の合計を検索する必要があります。 テーブルは 小計+ TaxAmtがサブクエリで複数の合計とグループを使用する方法

1>以下の形式で結果を表示し(それぞれ、オンライン0/1 /直接的である)全順序量
OnlineOrderFlagを与えるSalesOrderHeaderある

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

スペルを少し変更しても、これは2番目の質問でうまく機能します。 – goonernike

関連する問題