Только одно выражение может быть указано в списке выбора, если подзапрос не введен с EXISTS - PullRequest
0 голосов
/ 14 июля 2011

Вот мой запрос.Я получил эту ошибку.Пожалуйста, помогите мне.Спасибо.

ASC
ALTER  PROCEDURE [dbo].[sp_CostAllocation_Test]
@CompanyCode VARCHAR(3),
@EmpCode VARCHAR(600),
@PayCode VARCHAR(600)

AS
SELECT

CTPY33PAYRP.CTPAPECOD As EmployeeCode,
CTPY33PAYRP.CTPAPPCOD As paycode,
(select PY11RPTFPD.rpcol as columntotal from  PY11RPTFPD where rppcod =CTPAPPCOD) ,


(SELECT COCODE,CTPAPECOD,CTPAPPCOD
 FROM CTPY33PAYRP

WHERE CTPY33PAYRP.COCODE = @CompanyCode 
AND CTPY33PAYRP.CTPAPECOD =@EmpCode 
AND CTPY33PAYRP.COCODE = @CompanyCode
AND CTPY33PAYRP.CTPAPPCOD=@PayCode) As PayCode_Check,
PY11RPTFPD.RPPCOD As PayType,
(SELECT RPCOL,RPPCOD
        FROM  PY11RPTFPD,CTPY33PAYRP
        WHERE CTPY33PAYRP.CTPAPPCOD=PY11RPTFPD.RPPCOD)
from CTPY33PAYRP,PY11RPTFPD
ORDER BY CTPAPECOD 

1 Ответ

1 голос
/ 14 июля 2011

Я должен сказать, что ваши соглашения об именах не совсем прозрачны!

Не зная схем для ваших таблиц, сложно сказать наверняка, но я думаю, что у вас возникли проблемы с этим подзапросом:

(SELECT COCODE,CTPAPECOD,CTPAPPCOD FROM CTPY33PAYRP
 WHERE CTPY33PAYRP.COCODE = @CompanyCode AND CTPY33PAYRP.CTPAPECOD =@EmpCode 
 AND CTPY33PAYRP.COCODE = @CompanyCodeAND CTPY33PAYRP.CTPAPPCOD=@PayCode) As PayCode_Check,

и с этим подзапросом:

(SELECT RPCOL,RPPCOD
    FROM  PY11RPTFPD,CTPY33PAYRP
    WHERE CTPY33PAYRP.CTPAPPCOD=PY11RPTFPD.RPPCOD)

Вы выбираете несколько столбцов из одной таблицы в первом случае и из объединения двух таблиц во втором случае. В каждом подзапросе нет ничего, что ограничивало бы результаты одной строкой. Если вы собираетесь включить подзапрос в список выбора, то подзапрос должен возвращать одну строку на строку в вашем основном запросе. Кроме того, я никогда не видел подзапрос с несколькими столбцами.

Поскольку я не имею ни малейшего представления о том, для чего предназначен запрос, из ваших таблиц и имен столбцов я не могу дать вам однозначного совета о том, как исправить синтаксические ошибки. Я бы сказал, оставьте ваши подвыборы в один столбец каждый . Это то, что сообщение об ошибке говорит вам. Также следует либо соотнести подзапросы с основным запросом, чтобы было возможно только одно значение, либо использовать статистическую функцию в подзапросах, чтобы гарантировать, что для каждой записи в основном запросе возможно только одно значение.

Кроме того, я также скажу, что вы должны изучить синтаксис соединения ANSI. Поначалу это кажется сложным, но как только вы привыкнете, это ваш друг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...