我有两张表pricelist
和stock
。这些表有以下列
Pircelist
列itemno,batchno,mrp,rate
。 Stock
表格有itemo,mrp,batchno,npr,stock
。
现在我希望在itemno,batchno,mrp,rate
表中选择pricelist
和avg(npr),sum(stock)
stock
。所以我试过这个
SELECT itemno,
salesrate,
mrp,
batchno,
0 AS avgnpr,
0 AS stock
FROM pricelist
UNION ALL
SELECT 0 AS itemno,
0 AS salesrate,
0 AS mrp,
'' AS batchno,
Avg(npr) AS avgnpr,
Sum(stock)
FROM stock
GROUP BY itemno,
mrp,
batchno
以上查询重新调整错误重新开始
但现在我正在使用它:
Dim Rdr As DataTableReader = Nothing
SELECT itemno,
batchno,
mrp,
rate
FROM pricelist
Rdr = GlobalAppSetup.Mthds.ExecuteQry(xQry)
While Rdr.Read
Using rdr1 As DataTableReader = GlobalAppSetup.Mthds.ExecuteQry(
"select avg(npr) as avgnpr,sum(stock) as stock from stock where itemno=" &
Rdr.Item("itemno") & " and mrp = " & CDbl(Rdr.Item("mrp")) & " and batchno='" & Trim(Rdr.Item("batchno")) & "' group by itemno,mrp,batchno")
If rdr1.Read Then
txt.Text = Rdr.Item("avgnpr")
End If
End Using
使用上面的查询查询内部的
如何在单个查询中获取itemno,batchno,mrp,rate,avg(npr),sum(stock)
这些值
由于
正在使用 Postgresql版本9.3 前端Vb.Net 2008
答案 0 :(得分:0)
试试这个
select p.itemno, p.batchno, p.mrp, p.rate,
avg(s.npr) as npr,sum(s.stock) as total
from pricelist p,stock s
where p.itemno=s.itemno;
答案 1 :(得分:0)
好像你正在寻找一个内部联接,而不是一个联盟。一个联合所有需要两个或多个查询并将它们加在一起(I.E,查询1得到10行,查询2得到10行,你将它们联合起来得到20行)。
使用内部联接,使用相同的示例,您只能获得10行,但您可以组合每个表中的数据。不要忘记使用“分组依据”,以便为每个项目获取一行 - 在一个组中,您必须包括select语句中的所有列,但不在avg或sum等组函数中使用。 试试这个:
select p.itemno, p.batchno, p.mrp, p.rate,
avg(s.npr) as npr,sum(s.stock) as total
from pricelist p
join stock s on s.itemno to p.itemno
group by p.itemno, p.batchno, p.mrp, p.rate