-1

私のクエリは実行されますが、結果は返されません:

SET NoCount ON

SELECT 
   Inventory.EffectiveDate, 
   Inventory.Quantity, 
   Inventory.SourceType,
   Inventory.PickingLocation, 
   Inventory.SourceInventory,
   Locations.LocationId,
   Customers.CustomerName,
   Products.ProductId,
   LocationFrom.LocationId as lFrom,
   LocationTo.LocationId as lTo

FROM (((((((dbo.Inventory AS Inventory

   LEFT JOIN dbo.Products AS Products ON  Products.Product = Inventory.Product )
   LEFT JOIN dbo.Locations AS Locations ON Locations.Location = Inventory.Location )
   LEFT JOIN dbo.Customers AS Customers ON Customers.ConsignmentLocation = Inventory.Location )

   LEFT JOIN dbo.Inventory AS SourceLocation ON SourceLocation.Inventory = Inventory.SourceInventory)
   LEFT JOIN dbo.Locations AS LocationFrom ON LocationFrom.Location = SourceLocation.Location )

   LEFT JOIN dbo.Inventory AS TargetLocation ON TargetLocation.Inventory = Inventory.TargetInventory)
   LEFT JOIN dbo.Locations AS LocationTo ON LocationTo.Location = TargetLocation.Location)

WHERE  
    (Inventory.SourceType = 'Q' OR Inventory.SourceType = 'G' OR Inventory.SourceType = 'P' OR Inventory.SourceType = 'A' OR Inventory.SourceType = 'B') 
    AND 
    ((Inventory.EffectiveDate >= 2011-12-30 And Inventory.EffectiveDate <= 2011-12-31));

このクエリは Excel から正常に実行されます。しかし、テーブルを表示できるツールを探していたので、Access を使用していますが、さらに問題が発生します....

4

1 に答える 1

1

日付パラメータを一重引用符で囲む必要があります。

Inventory.EffectiveDate >= '2011-12-30'

コードをより簡潔にするために、より短いエイリアスの使用も検討する必要があります。Products表現するようなエイリアスを使用する目的がわかりませんdbo.Products...Accessで括弧が強制されない場合は、不要な括弧もすべて削除する必要があります。

SET NOCOUNT ON;

SELECT 
   inv.EffectiveDate, 
   inv.Quantity, 
   inv.SourceType,
   inv.PickingLocation, 
   inv.SourceInventory,
   loc.LocationId,
   cust.CustomerName,
   prod.ProductId,
   lFrom.LocationId as lFrom,
   lTo.LocationId as lTo
FROM  dbo.Inventory AS inv
LEFT OUTER JOIN dbo.Products  AS prod  ON prod.Product   = inv.Product
LEFT OUTER JOIN dbo.Locations AS loc   ON loc.Location   = inv.Location
LEFT OUTER JOIN dbo.Customers AS cust  ON inv.Location   = cust.ConsignmentLocation
LEFT OUTER JOIN dbo.Inventory AS src   ON src.Inventory  = inv.SourceInventory
LEFT OUTER JOIN dbo.Locations AS lFrom ON lFrom.Location = src.Location
LEFT OUTER JOIN dbo.Inventory AS trg   ON trg.Inventory  = inv.TargetInventory
LEFT OUTER JOIN dbo.Locations AS lTo   ON lTo.Location   = trg.Location
WHERE  
    inv.SourceType IN ('Q', 'G', 'P', 'A', 'B') 
    AND inv.EffectiveDate >= '2011-12-30' 
    AND inv.EffectiveDate <= '2011-12-31'; -- suspect you want < '2012-01-01' here
    -- unless your column doesn't store time.
于 2012-02-23T17:34:35.237 に答える