在一个Sql查询中使用Join和Union All

时间:2018-02-16 09:57:11

标签: sql sql-server join left-join union

好吧,这个代码错误的是它只显示union all all segment之后的部分结果。我无法在联合之前显示该部分。

我希望这段代码能够显示具有相同productid的结果以及voucherno在TBLGRN,TBLUPGRN和TBLINV中匹配的位置。

任何帮助将不胜感激。

sqlGRN = "select g.ProductID,g.Qty as GRNQTY,i.qty as InvQty,g.VoucherNo," & _
     "g.CostPrice,i.ItemPrice as SellPrice from" & _
     " tblupgrn g left join tblinv i on g.voucherno=i.invoiceno where supplier='" & IgridCustomers.cellValue(IgridCustomers.CurRow, "Customer") & " and" & _
     " i.productid=g.productid' group by g.productid," & _
     "g.qty,g.costprice,g.voucherno,I.ITEMPRICE,i.qty union all" & _
    " select g2.ProductID,g2.Qty as GRNQTY,i2.qty as InvQty,g2.VoucherNo," & _
    "g2.CostPrice,i2.itemprice as SellPrice" & _
    " from tblgrn g2 left join tblinv i2 on g2.voucherno=i2.invoiceno where supplier='" & IgridCustomers.cellValue(IgridCustomers.CurRow, "Customer") & "' and" & _
    " i2.productid=g2.productid group by g2.productid," & _
    "g2.qty,g2.costprice,g2.voucherno,I2.ITEMPRICE,i2.qty"

以上是实际查询。

我有表格名为TBLGRN,TBLUPGRN,TBLINV

TBLGRN& TBLUPGRN有以下列

Supplier|ProductID|Qty|VoucherNO

TBLINV有以下专栏

ProductID|ItemPrice|Qty|InvoiceNo

我有关于TBLGRN的以下数据

Supplier|PRODUCTID||QTY  |VOUCHERNO|COSTPRIE  

Muzamil |1        |10    |12345    |100  
Muz5    |2222     |12    |12346    |200

我有关于TBLUPGRN的以下数据

Supplier|PRODUCTID|QTY  |VOUCHERNO|COSTPRICE  

Iddi    |15       |10   |2456     |150  
Sumo    |50       |200  |7869     |350

以下数据位于TBLINV表

PRODUCTID|ITEMPRICE|QTY|INVOICENO  

1        |150      |10 |12345  
50       |500      |200|7869  
2222     |400      |200|12346  
15       |300      |10 |2456  

我得到的结果就是这个

PRODUCTID|GRNQTY|INVQTY|VOUCHERNO|COSTPRICE|SELLPRICE  

1        |10    |10    |12345    |100      |150  
2222     |12    |12    |12346    |200      |400

我想要这个结果

PRODUCTID|GRNQTY|INVQTY|VOUCHERNO|COSTPRICE|SELLPRICE  

1        |10    |10    |12345    |100      |150  
2222     |12    |12    |12346    |200      |400  
50       |200   |200   |7869     |350      |500  
15       |10    |10    |2456     |150      |300  

我希望我能解释清楚。

NB:我已经减少了以前的代码,只省略了一些不必要的列。

2 个答案:

答案 0 :(得分:0)

ft join tblinv i on g.voucherno = i.invoiceno,其中supplier ='“& IgridCustomers.cellValue(IgridCustomers.CurRow,”Customer“)&”and“& _          “g.rndate,g.productid,g.partno,”& _

如果你检查这行“和”& _“i.productid = 它没有空间,所以sql变成了andi.productid

下次你可以打印sql变量并在sql程序中运行,它更容易调试

答案 1 :(得分:0)

谢谢你们的时间,但我设法回答了我自己的问题。我实际上错过了这条线上的撇号。

sqlGRN =“选择g.ProductID,g.Qty为GRNQTY,i.qty为InvQty,g.VoucherNo,”& _      “g.CostPrice,i.ItemPrice as SellPrice from”& _      “tblupgrn g离开加入tblinv i on g.voucherno = i.invoiceno,供应商= '”& IgridCustomers.cellValue(IgridCustomers.CurRow,“Customer”)& “ 和”& _