2017-02-20 124 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

相關問題