2

SQLiteの選択に問題があります。

テーブル「kategorie」、「lv」、「majetok」、「parcela」があります。

各人は、テーブル「majetok」に自分が所有しているものに関する情報を持っています。サンプルレコード:

id      idpodfk idlvfk  podiel  podield cislozlv datum1         datum2
1       31      1       1/10000 0,0001  789      16. 9. 2012    16. 9. 2012

idpodfk-個人IDの
fkidlvfk-土地レコードIDのfk

テーブルLV(土地レコードのテーブル)、サンプルレコードもあります。

idlv    lvnazov katuzemie
1       1830    Plavecký Mikuláš

また、私はテーブル「parcela」を使用し、土地レコードの小包に関する情報をそこに保存します

pnazov  rozloha idlvfk  idkategoriafk typ
5432    692312  1       1             C

そしてテーブルカテゴリー

idkategoria  meno 
1            Lesné pozemky

必要なもの:このselectのforeachレコード

SELECT   SUM(podield) AS sum1, idlvfk
FROM     majetok a
WHERE    idpodfk = 1
GROUP BY idlvfk

これを選択する必要があります

SELECT     SUM(par.rozloha)*sum1 AS m2, kat.meno --sum1 from statement above
FROM       Parcela par 
INNER JOIN kategorie kat ON par.IDkategoriaFK = kat.IDkategoria
WHERE      par.IDLVFK = 1 --IDLVFK from statement above
GROUP BY   kat.meno

(2番目の)クエリ出力は次のようになります

m2     kat.meno
123.23 Lesne pozemky    --FOR FIRST IDLVFK
324.52 Ostatne pozemky  --FOR FIRST IDLVFK   
235    Pasienky         --FOR FIRST IDLVFK 
144.23 Lesne pozemky    --FOR NEXT IDLVFK
543.52 Ostatne pozemky  --FOR NEXT IDLVFK
756    Pasienky         --FOR NEXT IDLVFK
.
.
.

次に、kat.menoでグループ化する必要があるため、最終的な出力は次のようになります。

m2     kat.meno
267,46 Lesne pozemky
868,04 Ostatne pozemky
991    Pasienky
.                         --other kat.meno if there is
.                         --other kat.meno if there is

これは1つのクエリで可能ですか、それともフロントエンドで処理する必要がありますか?

テーブルとクエリの背景:

土地の記録にはいくつかの区画があります(すべての区画には独自のカテゴリがあります。たとえば、森林区画など)。人は土地記録の一部を所有しています(テーブルmajetokに保存されます。例:1/1000)。つまり、彼はその土地記録の各区画から1/1000を所有しているということです。カテゴリ(SUM(par.rozloha)* sum1 AS m2)ごとに彼が所有するエリア(パーセラテーブルの列 "rozloha")を選択したいと思います。したがって、その土地レコードでそのカテゴリのすべての区画の合計を数え、その人を所有する部分を掛ける必要があります。しかし、彼は1つの土地レコードで1/1000を所有し、2番目の土地レコード(別の土地レコード=別の区画)で3/3456を所有できるため、土地レコードごとに行う必要があり、最後のコードで確認できます。

4

1 に答える 1

0

4つのテーブルすべてを結合すると、合計のレコード数が正しくなりません。

ビューの代わりにサブクエリを使用することができます。

SELECT SUM(step2.area_sum),
       step2.meno
FROM (SELECT SUM(rozloha) * sum(podield_sum) AS area_sum,
             par.idlvfk,
             meno
      FROM parcela par
      JOIN kategorie kat ON par.idkategoriafk = kat.idkategoria
      JOIN (SELECT SUM(podield) AS podield_sum,
                   idlvfk
            FROM majetok
            GROUP BY idlvfk) AS ps ON ps.idlvfk = par.idlvfk
      GROUP BY idlvfk,
               meno) AS step2
GROUP BY step2.meno

SQL Fiddleのサンプルデータでテストしました:http ://sqlfiddle.com/#!2/626e6 / 9

于 2012-09-25T13:58:41.023 に答える