2012-01-05 9 views
1

のプロセスは、ここで質問です:SQLクエリヘルプ - 建設や計算

私は2つのテーブル、基本データとその唯一の値と基本データに関連するデータを含むものを含むものがあります。

TABLE1を pKey | category1 | category2 | ..3 |etc

pKeyは、各実世界のオブジェクトに固有のTABLE2 pKey | value1 |

、examplのシリアル番号e。

now、オブジェクトの値をオブジェクトの所有者に追加する目的で、テーブルを比較して他のテーブルのオブジェクトと値を一致させるにはどうすればよいでしょうか?

SCENARIO:

Obj1とは、月の終わりに、我々はすべてのフランチャイズの費用/販売などを述べたレポートとのそののすべての所有者を取得し、1人が所有している多くのフランチャイズの一つでありますこの特定の所有者がどのようにしたかを計算しなければなりません。だから我々は、所有者を取得し、ように見えるデータを期待して、一日の終わりに彼のランニング合計に、この特定のフランチャイズの「正味利益」をアップ追加するには、TABLE1にtable2の比較:

表3 owner | Total Earnings |

SELECT * FROM Table1 INNER JOIN Table2 WHERE Table1.pkey = Table2.pKey

唯一の問題は、それは、それ自体が、非常に有用ではないということです:私は比較んクエリを書いている

。したがって、次のプロセスは、これを行う方法です構文エラーを無視し、私はすべての時間をシフト押し忘れ:

SELECT DISTINCT(Owner) FROM TABLE1

、各所有者のための表1をループ彼のすべてのpKeys

SELECT pKey FROM Table1 Where Owner = ownerResult.Ownerを取得します

は、値を取得するためにTABLE2にそれから結果を比較

SELECT Value FROM TABLE2 INNER JOIN TABLE1 WHERE table2.pKey = table1.pKey

その結果を追加します。

また、SQLは浮動小数点数を処理しますか?そうでなければ特別なステップが必要ですか?

+0

20人のオーナーがいると言えば、それぞれのためにそこをループする必要があります。不器用で、好きではありません。 – Dani

答えて

1

あなたはすべて1つのステートメントでこれを行うことができます:私たちはここで使用している何

select 
    t1.Owner, 
    sum(t2.Value) as NetProfit 
from 
    Table1 t1 
    inner join Table2 t2 on 
     t1.pKey = t2.pKey 
group by 
    t1.Owner 

「集合関数」と呼ばれます。この場合、sumですが、maxまたはminまたはavgなどとすることができます。さらに、group byステートメントを使用してパーティションを分割することもできます(「これらの列の異なるレベルで集約を機能させるだけです」)。この場合、owner

あなたの最後の質問に答えるには、そうです。doubledecimal、およびnumericはすべて10進数を扱うことができるデータ型です(これ以上の数もあります)が、より多く回答するにはデータベースサーバーの種類(MySQL、SQL Server、Oracleなど)を知る必要があります完全に。一部のものにはmoneyまたはcurrencyのデータ型が含まれているため、部分的なセントを持たないことを保証します。

+0

これはSQL Serverです。それを2番目にテストしてください。 – Dani

+0

@Dani - SQL Serverの場合は、ここをクリックしてください。http://msdn.microsoft.com/en-us/library/ff848794.aspxこれらはすべて利用可能な数値データ型です。あなたはこのユースケースのために 'お金'を調べたいと思うでしょう。 – Eric

0

あなたがtable2のからのすべての値の合計をしたいと仮定:

Select t1.pkey, sum(t2.value) 
from table1 t1 
inner join table2 t2 on t1.pkey = t2.pkey 
group by t1.pkey 

これは、table2の中に少なくとも1つの一致する行でTABLE1から行のみが返されます。

Select t1.pkey, sum(t2.value) 
from table1 t1 
left outer join table2 t2 on t1.pkey = t2.pkey 
group by t1.pkey 

SQLでの浮動小数点値について、一つの発言:あなたはTABLE1からすべての行をしたい場合は、外側の代わりに結合を使用しますが、通貨額を処理したい場合は、はTHISための浮動小数点演算を使いません。代わりに固定小数点表現を使用してください。 それ以外の場合は、丸め誤差が発生します。