联盟全部查询

时间:2013-11-22 07:17:32

标签: sql postgresql

我有两张表priceliststock。这些表有以下列

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

现在我希望在itemno,batchno,mrp,rate表中选择pricelistavg(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

2 个答案:

答案 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