Ошибка в запросе при использовании WHERE IN - PullRequest
0 голосов
/ 03 мая 2011

Это запрос, который я пытаюсь выполнить:

Select Status from [transaction] where TransactionID IN (select MAX(CAST(TransactionID AS VARCHAR(36))), sum(debit) 
FROM [transaction]
WHERE  dbo.getday(StartSaleTime) >= '5/1/2011' and dbo.getday(StartSaleTime) <= '5/3/2011'  and Status > -1 And TransactionNo like 'EL%' And TransactionType = 4 
GROUP BY CustomerID, debit HAVING ( COUNT(CustomerID) > 1 ))

возвращает эту ошибку:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

Он точно говорит вам, что не так в сообщении об ошибке. При использовании in вы можете указать только один столбец в списке выбора.

Если вы измените свой запрос на этот, он должен работать нормально.

Select Status from [transaction] where TransactionID 

IN (select MAX(CAST(TransactionID AS VARCHAR(36))) as [TransactionID]
FROM [transaction]
WHERE  dbo.getday(StartSaleTime) >= '5/1/2011' and dbo.getday(StartSaleTime) <= '5/3/2011'  and Status > -1 And TransactionNo like 'EL%' And TransactionType = 4 
GROUP BY CustomerID, debit HAVING ( COUNT(CustomerID) > 1 ))

Вы можете указать несколько столбцов, но только при использовании EXISTS , а не IN

3 голосов
/ 03 мая 2011

Вы выбираете две вещи и пытаетесь использовать это с IN ().Вы должны выбрать только идентификатор, когда пытаетесь сделать, где someId In (список идентификаторов).

2 голосов
/ 03 мая 2011

Ваш подзапрос должен возвращать только одно поле. Сейчас вы возвращаете два, так что общий запрос выглядит примерно так:

SELECT ... WHERE TransactionID IN ((a,b), (c,d), etc...)

SQL-сервер не знает, какой столбец использовать для IN, поэтому он жалуется.

...