在select语句中使用sqlite foreach?

时间:2012-09-25 04:18:07

标签: sql sqlite

我遇到了SQLite select的问题。

有表“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

人id的idpodfk-fk idlvfk-fk的土地记录id

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

idlv    lvnazov katuzemie
1       1830    Plavecký Mikuláš

我也使用“parcela”表,我在那里存储有关地块记录中包裹的信息

pnazov  rozloha idlvfk  idkategoriafk typ
5432    692312  1       1             C

表table kategorie

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

这在一个查询中是否可行,或者我是否需要在前端处理它?<​​/ p>

表和查询背景:

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

1 个答案:

答案 0 :(得分: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