2013-11-22 218 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