2017-05-15 6 views
0

私は、Oracle SQLで小計を作成する適切な方法を探しています。モデル、シフラー、velicina、小計を計算するSQLのOracleクエリ

をmagacinしかし、それは動作しません。これまでの記録私は、クエリ

select model, sifra, velicina, sum(nvl(magacin,0)) as suma 
from podmornica 
where model ='30001' 
group by sifra, velicina, cube (model) 
order by model, sifra, velicina 

は、私が列を持つテーブルpodmornicaがあることを確認してください。列モデルの2番目の行はすべてNULLで、最後は合計を計算しません。これを解決するには? ありがとう

P.S. 1つのモデルでは、SIFRAのバリエーションがあります。その結果、1つのモデル(この場合、モデルは30001)に対して各SIFRAの小計を持つことはできません。

MODEL SIFRA  VELICINA SUMA 

30001 3000101  0  1 
30001 3000102  0  2 
30001 3000103  0  5 
______________________________ 
30001      8 
+3

予想される出力とともに、サンプルデータをテーブルに含めるように質問を更新してください。 ROLLUPの後にいる可能性があります。私があなただったら、あなたができる集約の種類について[この記事](https://docs.oracle.com/cd/B19306_01/server.102/b14223/aggreg.htm)を読んでいます。または、[集計機能](https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm#SQLRF06174)を使用して、サブ集計を行うこともできます。 – Boneist

+0

フルキューブを必要としない場合は 'グループ化してグループ化する 'とします。 – xQbert

答えて

1

これはgroup by grouping setsを使用するための良い時間であるように思われます。..

SELECT MODEL, SIFRA,  VELICINA, sum(nvl(magacin,0)) as SUMA 
FROM podmornica 
WHERE model ='30001' 
GROUP BY GROUPING SETS ((MODEL, SIFRA, VELICINA), (Model)) 

モデル、sifra、velicinaでグループ化して詳細行を取得します。それらの3つのフィールドで合計されたマガジンで...

特定のモデルの合計が表示されるようにグループ化します。

また、列を追加する場合は、sum(magacin) over (partition by model) as sumBを選択に追加することで、モデルのすべての行に合計を表示できます。このアプローチでは、分析/ウィンドウ関数を使用しています。

+0

それは動作します。初めてこれについて聞くが、私は学ぶべきことがたくさんある。ありがとうございます:) – Smederevac

+1

これを含む記事を骨密度の高い人にリンクさせてください。私がしたことはすべてそれを綴っていました。 – xQbert

0

以下のように正確に何をしたい見つけるのは難しいかもしれないが、私はあなたがすべての列をキューブする必要があると思う:

select model, rgrupa, sifra, velicina, sum(nvl(magacin,0)) as suma 
from podmornica 
where model ='30001' 
group by cube(model, rgrupa, sifra, velicina) 
order by model,rgrupa, sifra, velicina 
+0

それは私のために働いていない...それは私に奇妙な結果を与える – Smederevac

+0

"奇妙な結果"。詳細を記入してください。 Ps:1つのモデルで各シフラの小計を見るだけの場合は、なぜ列をさらに選択していますか? –

+0

私はそのデータすべてを見ることができないので、もっと多くの列を選択しています。 1つのモデルは複数のシフラを持つことができるので、1つのモデルに対して各シフラの一部を破ることはできません。また、シフラは、より多くのvelicinaを持つことができます、それは私がこのすべてを選択する理由です。しかし、あなたはポイントがあります、それはrgrupaなしで行うことができます – Smederevac