Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无法从多个表中获取结果_Sql Server - Fatal编程技术网

Sql server 无法从多个表中获取结果

Sql server 无法从多个表中获取结果,sql-server,Sql Server,我有这个模式。我只对ItemNumber和ExternalInvoiceNUmber感兴趣。使用下面的代码 Select StockItem.ItemNumber, PurchaseItem.Quantity, Purchase.ExternalInvoiceNumber, PurchaseItem.Delivered From StockItem Left Join PurchaseItem On PurchaseIt

我有这个模式。我只对ItemNumber和ExternalInvoiceNUmber感兴趣。使用下面的代码

   Select
   StockItem.ItemNumber,
   PurchaseItem.Quantity,
    Purchase.ExternalInvoiceNumber,
    PurchaseItem.Delivered
     From
        StockItem Left Join
        PurchaseItem On PurchaseItem.fkStockItemId = StockItem.pkStockItemID Left Join
         Purchase On Purchase.pkPurchaseID = PurchaseItem.fkPurchasId
结果并不是我想要的

           ItemNumber  Quantity  ExternalInvoiceNumber  Delivered
            item1        10         PO9993                10 
            item1        10         PO9994                0
            item1        10         PO9995                0
问题是,我不希望任何包含已交付项目记录的结果。我试着使用代码

         where      PurchaseItem.Delivered <> '0'

但它不会显示只有1个externaminvoicenumber且已交付的任何项目。基本上,我希望mssql不显示任何已交付的记录。但是,如果已经传递了PO,那么它应该显示具有空白数量和空白外部发票号码的项目。这件事我绞尽脑汁已经一个星期了。您能帮助我吗?

您需要在加入条件中进行筛选

在WHERE中,它成为一个内部连接

...
Left Join
PurchaseItem On 
          PurchaseItem.fkStockItemId = StockItem.pkStockItemID
          AND PurchaseItem.Delivered <> '0'
Left Join
...
或者,我更喜欢将连接和筛选分离的样式

...
Left Join
(SELECT * FROM PurchaseItem WHERE Delivered <> '0') PurchaseItem 
        On  PurchaseItem.fkStockItemId = StockItem.pkStockItemID
Left Join
...

你能展示一下你想要的结果在测试数据上的样子吗?
WITH DeliveredInvoice AS
    (SELECT StockItem.ItemNumber as item, 0 as quant, 
        0 as ein, 0 as del
        FROM StockItem 
        JOIN PurchaseItem ON PurchaseItem.fkStockItemId = StockItem.pkStockItemId
        JOIN Purchase ON Purchase.pkPurchaseId = PurchaseItem.fkPurchaseId
        WHERE PurchaseItem.Quantity > 0
        AND PurchaseItem.Quantity = PurchaseItem.Delivered),
    UndeliveredInvoice AS
    (SELECT StockItem.ItemNumber as item, PurchasedItem.Quantity as quant, Purchase.ExternalInvoiceNumber as ein, 
        PurchaseItem.Delivered as del
        FROM StockItem 
            JOIN PurchaseItem ON PurchaseItem.fkStockItemId = StockItem.pkStockItemId
            JOIN Purchase ON Purchase.pkPurchaseId = PurchaseItem.fkPurchaseId
        WHERE PurchaseItem.Delivered = 0)

SELECT item, quant, ein, del
FROM UndeliveredInvoice

UNION

SELECT item, quant, ein, del
FROM UndeliveredInvoice
WHERE item NOT IN (select distinct item from UndeliveredInvoice)