2013-11-22 139 views
1

我有两个表priceliststock。这些表具有以下列Union All查询

Pircelistitemno,batchno,mrp,rateStock表有itemo,mrp,batchno,npr,stock

现在我想从pricelistavg(npr),sum(stock)stock表中选择itemno,batchno,mrp,rate。所以我想这

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 

上面的查询retun错误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

回答

0

好像你正在寻找一个内部看起来加入,不是工会所有。联合都需要两个或两个以上的查询并将它们加在一起(I.E,查询1获得10行,查询2获得10行,将它们联合起来并获得20行)。

使用内部连接,使用相同的示例,您只能获得10行,但可以合并每个表中的数据。不要忘记使用“group by”,这样你就可以获得每个项目的一行 - 在一个组中,你必须包括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 
+0

@SATSON - 我明白了同样的事情,所以也许这个问题可能是在解释一边?如果你想进一步了解,我建议你更清楚地解释你想做什么,说“这是错误的”并不是鼓励任何人为你提供帮助 – oerkelens

+0

@oerkelens对不起,先生。好吧,我将编辑完整说明的问题 – Sathish

+0

@JoeLove - 我没有写任何版本的问题;) – oerkelens

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; 
+0

检查我的更新 – Sathish