Join 如何从以下两个查询中选择一个

Join 如何从以下两个查询中选择一个,join,sql-server-2012,Join,Sql Server 2012,我有两个问题: 第一个查询是: SELECT sale.saleid, sale.totalpaid, item.itemname AS item, stock.saleprice AS Price, invoice.qty, sale.discount, invoice.saleprice AS [invoice saleprice], cetegory.catname AS [Cateogo

我有两个问题:

第一个查询是:

SELECT sale.saleid, 
   sale.totalpaid, 
   item.itemname         AS item, 
   stock.saleprice       AS Price, 
   invoice.qty, 
   sale.discount, 
   invoice.saleprice     AS [invoice saleprice], 
   cetegory.catname      AS [Cateogory], 
   cetegory.subcat       AS [Sub Catgry], 
   vehicle.vehicle_name  AS [Vehicle], 
   vehicle.vehicle_model AS [Model], 
   item.model_number     AS [Part No.], 
   sale.date, 
   stock.size, 
   sale.customerid 
FROM   invoice 
       JOIN item 
         ON invoice.itemid = item.itemid 
       JOIN sale 
         ON invoice.saleid = sale.saleid 
       JOIN stock 
         ON item.itemid = stock.itemid 
       JOIN cetegory 
         ON item.catid = cetegory.catid 
       JOIN vehicle 
         ON item.vehicleid = vehicle.vehicleid 
WHERE  sale.saleid = 5 
SELECT customer.customername, 
       customer.customercontact, 
       customer.customeraddress, 
       account.account_type 
FROM   account 
       JOIN customer 
         ON customer.customerid = account.customerid 
第二个查询是:

SELECT sale.saleid, 
   sale.totalpaid, 
   item.itemname         AS item, 
   stock.saleprice       AS Price, 
   invoice.qty, 
   sale.discount, 
   invoice.saleprice     AS [invoice saleprice], 
   cetegory.catname      AS [Cateogory], 
   cetegory.subcat       AS [Sub Catgry], 
   vehicle.vehicle_name  AS [Vehicle], 
   vehicle.vehicle_model AS [Model], 
   item.model_number     AS [Part No.], 
   sale.date, 
   stock.size, 
   sale.customerid 
FROM   invoice 
       JOIN item 
         ON invoice.itemid = item.itemid 
       JOIN sale 
         ON invoice.saleid = sale.saleid 
       JOIN stock 
         ON item.itemid = stock.itemid 
       JOIN cetegory 
         ON item.catid = cetegory.catid 
       JOIN vehicle 
         ON item.vehicleid = vehicle.vehicleid 
WHERE  sale.saleid = 5 
SELECT customer.customername, 
       customer.customercontact, 
       customer.customeraddress, 
       account.account_type 
FROM   account 
       JOIN customer 
         ON customer.customerid = account.customerid 

现在,我想按客户id组合这两个查询,因为我在销售表中有客户id

您可以使用CTE,然后将两者合并:

 WITH CUST
 AS
  (SELECT customer.customername, 
   customer.customercontact, 
   customer.customeraddress, 
   account.account_type ,
   customer.customerid
 FROM   account 
   JOIN customer 
     ON customer.customerid = account.customerid 
 ),

 SALES
 AS
 (
 SELECT sale.saleid, 
 sale.totalpaid, 
 item.itemname         AS item, 
 stock.saleprice       AS Price, 
 invoice.qty, 
 sale.discount, 
 invoice.saleprice     AS [invoice saleprice], 
 cetegory.catname      AS [Cateogory], 
 cetegory.subcat       AS [Sub Catgry], 
 vehicle.vehicle_name  AS [Vehicle], 
 vehicle.vehicle_model AS [Model], 
 item.model_number     AS [Part No.], 
 sale.date, 
 stock.size, 
 sale.customerid 
 FROM   invoice 
   JOIN item 
     ON invoice.itemid = item.itemid 
   JOIN sale 
     ON invoice.saleid = sale.saleid 
   JOIN stock 
     ON item.itemid = stock.itemid 
   JOIN cetegory 
     ON item.catid = cetegory.catid 
   JOIN vehicle 
     ON item.vehicleid = vehicle.vehicleid 
 WHERE  sale.saleid = 5 
 )

SELECT * FROM CUST
LEFT JOIN SALES
ON CUST.customerid = SALES.customerid

c标记的用途是什么?因为我在c@Mrkhan从何处调用查询不会影响查询本身。至于问题本身,你是什么意思?为什么不在一个查询中联接所有表呢?您希望输出是什么样子的?我只想将上述两个查询合并为一个查询。。这正是我想要在一个查询中联接所有表的原因。但不知道如何做,因为公共表表达式是临时结果集,您可以在另一个SELECT、INSERT、UPDATE或DELETE语句中引用它。它们是在SQLServer2005版中引入的。CTE总是返回一个结果集。它们用于简化查询,例如,您可以使用它们从主查询体中删除一个派生表嘿,伙计,您的查询工作正常现在有问题,您能帮我解决吗1我只返回“Asia Dreer 600”,并显示该项。我想跳过这一步,对于其他没有返回2的销售id,付款、借记和折扣金额已经根据一个saleid支付,它会显示我想要的每个相同的销售id。当销售id相同时,只有第一行具有相同的销售id,这些付款、借记和折扣金额会显示,否则它应该为零或为空。请参见图片