2016-07-17 21 views
0

単純なSQLクエリを作成してExcelでレポートを作成することに慣れていますが、この場合データがExcelでモデル化するには大きすぎますが、SQLへのアプローチ方法はわかりません溶液。複雑なSQLレポートの売上データを集計する方法

私は1つのテーブルを持っています(私はこのテーブルにフルアクセスできますが、データベースはありません。つまり、テーブルを追加できません)。このテーブルには約500の異なる口座のトランザクションがあります。私がする必要があるのは、アカウントごとに1つの行ごとに各製品の購入総額を報告するレポートを作成することです。最小のアカウントから最大のアカウントの順に表示されます。

私は販売によってアカウントのリストを取得することができます。

SELECT Account, SUM(Sales) AS AccountTO 
FROM DataIOS 
WHERE (TradeDate between ? AND ?) AND 
GROUP BY Account 
ORDER BY AccountTO 

が、不明な点が第一のアカウントを取得する方法を、すべての500個のアカウントについては、製品の合計、そして第二のアカウント、製品の合計など、。

ご迷惑をおかけして申し訳ありません。

+0

サンプルデータと望ましい結果は、達成したいこと。また、通常、SQLはデータベースに関連付けられています。使用しているデータベースで質問にタグを付けます。 –

答えて

0

は次のようにいくつかの事。)カラムによってパーティション(上のウィンドウ関数(すなわちwindowfunc(列)とCTE(共通テーブル式)を使用してみてください。

;WITH accountTotals (acctId, prodId, acctTotal, ProdTotal) 
AS (
    SELECT AccountId, ProducatID, Sum(Sales) over (Partition By AccountID) as AccountTotal, Sum(Sales) over (Partiton by AccountId, ProductID) as ProdTotal 
    Where TransDate >= @inclusiveStart and TransDate < @exclusiveEnd 
) 
SELECT Distinct AcctID, ProdID, ProdTotal from accountTotals 
ORDER BY acctTotal, acctId, prodId 

Excelを言及しているので、私はSQL Serverを想定していますまた、OracleではCTEも使用できますが、MySQLでは使用できません(関連するサブクエリを使用しないでください)。

日付にBetweenを使用しないでください。半開きの間隔で明示的に比較してくださいより小さい)

関連する問題