我遇到了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的第二个土地记录(另一个土地记录=另一个地块),所以我们必须为每个土地记录做,总结你可以在最后的代码中看到。
答案 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