2017-02-20 92 views
0

我有一张名为tblEventLocationStock的表。它存储某个地点和事件的股票销售信息。我试图得到一个与上一个事件的结束计数不同的项目列表。我有了这个查询,但我得到的“子查询返回多个值”错误:我为SQL Server的这个子查询做了什么错误?

SELECT ID,EventID,LocationID,StockID,StartQty,UnitPrice,PhysicalSalesQty,PhysicalSalesValue,PhysicalEndQty,TillSoldQty,TillSoldValue 
FROM tblEventLocationStock ELS 
where StartQty <> (
    select PhysicalEndQty from tblEventLocationStock ELSO 
     where ELS.StockID=ELSO.StockID 
     and ELS.LocationID=ELSO.LocationID 
     and ELS.EventID=(ELSO.EventID+1000)) 
     ORDER BY ID desc 

我用ELS.EventID = ELSO.EventID + 1000,因为事件的ID为1000的间隔上去。

奇怪的是,即使我得到“子查询返回多个值”的错误,我仍然在结果选项卡中得到10行。这10个结果看起来似乎具有与前一个事件相同的位置上的相同项目不同的起始计数。另外,如果我使用订单,我将得不到任何结果,但如果我不使用订单,我仍然会得到10个结果。

更奇怪的是,如果我运行一些连接到某些其他表的查询来获得这10个结果,这样我就可以获取股票项目和位置的名称而不仅仅是ID,但如果我没有加入,我没有结果。

+0

为什么你可以使用NOT EXISTS来代替 '<>' –

回答

1

试试这个,

SELECT ID, EventID, LocationID, StockID, StartQty, UnitPrice, PhysicalSalesQty, 
     PhysicalSalesValue, PhysicalEndQty, TillSoldQty, TillSoldValue 
FROM tblEventLocationStock ELS 
WHERE NOT EXISTS (
    SELECT 1 
    FROM tblEventLocationStock ELSO 
    WHERE ELS.StockID = ELSO.StockID  AND 
      ELS.StartQty <> ELSO.PhysicalEndQty AND 
      ELS.LocationID = ELSO.LocationID  AND 
      ELS.EventID = (ELSO.EventID+1000) 
) 
ORDER BY ID DESC 
+0

谢谢,这作品!我将不得不阅读使用子查询的正确方法。 – user3634056

+0

什么是 之间的差'WHERE NOT EXISTS(SELECT FROM tblEventLocationStock ELSO WHERE ELS.StartQty = ELSO.PhysicalEndQty AND ELS.EventID =(ELSO.EventID + 1000)' 和 'WHERE EXISTS( SELECT 1 FROM tblEventLocationStock ELSO WHERE ELS.StartQty <> ELSO.PhysicalEndQty AND ELS.EventID =(ELSO.EventID + 1000)' – user3634056

相关问题