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-fk 人 id
idlvfk-fk 土地记录 id

还有表LV(土地记录表),样本记录:

idlv    lvnazov katuzemie
1       1830    Plavecký Mikuláš

我还使用了“parcela”表,我在其中存储了土地记录中有关地块的信息

pnazov  rozloha idlvfk  idkategoriafk typ
5432    692312  1       1             C

和表类别

idkategoria  meno 
1            Lesné pozemky

我需要什么:此选择中的 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

(第二个)查询输出应如下所示

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

这是否可以在一个查询中进行,还是我需要在前端处理它?

表格和查询背景:

土地记录中有一些地块(每个地块都有自己的类别,例如森林地块等)。人拥有土地记录的一部分(保存在 majetok 表中,例如:1/1000)。这意味着他拥有该土地记录中每个地块的 1/1000。我想为每个类别(SUM(par.rozloha)*sum1 AS m2)选择他拥有的区域(parcela 表中的“rozloha”列)。因此,我们必须计算该土地记录上该类别中所有地块的总和,并乘以拥有该人的部分。但是他可以在一个土地记录上拥有 1/1000,在第二个土地记录上拥有 3/3456(另一个土地记录=另一个地块),所以我们必须为每个土地记录做,总结你可以在最后的代码中看到。

4

1 回答 1

0

对所有四个表的联接将没有正确数量的总和记录数。

您可以做的是使用子查询代替视图:

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 回答