Подзапрос возвращает более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = - PullRequest
0 голосов
/ 06 февраля 2020

В приведенном ниже запросе выдается ошибка, как показано ниже:

Подзапрос возвращает более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> =.

ALTER PROCEDURE [dbo].[usp_s_AlphaBotAssociatedUserList] @AlphaBotMasterId INT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

SELECT u.UserName
    ,u.Id AS UserId
    ,(
        SELECT COUNT(*)
        FROM dbo.AlphaBotMasterSetting AS abms
        WHERE abms.AlphaBotMasterId = @AlphaBotMasterId
            AND ISNULL(abms.IsActive, 0) = 1
        ) AS TotalAlphaBotMasterMarkets
    ,(
        SELECT COUNT(*)
        FROM dbo.UserSessionDetail AS usd
        WHERE ISNULL(usd.IsSessionClosed, 0) = 0
            AND usd.UserSessionId IN (
                SELECT Id
                FROM dbo.UserSessions AS us
                WHERE us.AlphaBotMasterId = @AlphaBotMasterId
                    AND ISNULL(us.IsActive, 0) = 1
                )
        ) AS ConfiguredMarkets
    ,(
        SELECT ISNULL(us.IsActive, 0)
        FROM dbo.UserSessions AS us
        WHERE us.AlphaBotMasterId = @AlphaBotMasterId
        ) IsSessionRunning
FROM dbo.AlphaBotClient AS abc
INNER JOIN dbo.AlphaBotClientPayment AS abcp ON abcp.AlphaBotClientId = abc.Id
INNER JOIN dbo.AbpUsers AS u ON abc.CreatorUserId = u.Id
WHERE abc.AlphaBotMasterId = @AlphaBotMasterId
    AND abcp.Type = 'Confirmed'
END;

Ответы [ 2 ]

3 голосов
/ 06 февраля 2020

Вы можете использовать IN, NOT IN или Exist, NOT Exist с несколькими значениями.

Ваша проблема здесь

(SELECT ISNULL(us.IsActive,0) FROM dbo.UserSessions AS us WHERE us.AlphaBotMasterId=@AlphaBotMasterId) IsSessionRunning 

Вы должны получить одно значение как SELECT Max(ISNULL(us.IsActive,0))

2 голосов
/ 06 февраля 2020

Проблема в подзапросе

 (SELECT ISNULL(us.IsActive,0) FROM dbo.UserSessions AS us WHERE us.AlphaBotMasterId=@AlphaBotMasterId)

, поскольку вы не получаете здесь ни одного значения.

Вы можете использовать MAX(ISNULL(us.IsActive,0)) вместо

...