2017-02-20 1 views
0

У меня есть таблица tblEventLocationStock. Он хранит информацию о продажах для акций в определенном месте и событии. Я пытаюсь получить список элементов, которые имеют другой начальный счет, чем счетчик окончания из предыдущего события. У меня есть этот запрос, но я получаю «подзапрос возвращает более чем 1 значение» ошибка:Что я сделал с этим подзапросом для 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, так как идентификатор события Поднимемся в интервалах 1000.

Что странно в том, что даже если я получаю ошибку «подзапрос возвратил более одного значения», я все равно получаю 10 строк на вкладке результатов. Кажется, что у этих 10 результатов есть другой начальный счет для предметов, чем тот же элемент в том же месте, что и предыдущее событие. Кроме того, я не получаю никаких результатов, если я использую порядок, но все равно получаю 10 результатов, если я не использую порядок.

Что еще более странно, так это то, что я получаю эти 10 результатов, если я запускаю запрос с некоторыми объединениями в некоторые другие таблицы, поэтому я могу получить имена элементов и местоположений акций вместо отдельных идентификаторов, но если я сделаю это без присоединяется, я не получаю никаких результатов.

+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 ( ВЫБРАТЬ 1 ОТ tblEventLocationStock ELSO ГДЕ ELS.StartQty = ELSO.PhysicalEndQty И ELS.EventID = (ELSO.EventID + 1000)' и 'WHERE EXISTS ( SELECT 1 FROM tblEventLocationStock ELSO WHERE ELS.StartQty <> ELSO.PhysicalEndQty И ELS.EventID = (ELSO.EventID + 1000)' – user3634056

 Смежные вопросы

  • Нет связанных вопросов^_^