[英]Union All Query
我有两个表pricelist
和stock
。 这些表具有以下列
Pircelist
列itemno,batchno,mrp,rate
。 Stock
表有itemo,mrp,batchno,npr,stock
。
现在我要从pricelist
选择itemno,batchno,mrp,rate
以及stock
表中的avg(npr),sum(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
上面的查询重调错误的reslut
但是现在我正在使用这个:
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
尝试这个
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获得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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.