SSRS2008 - ВЫБЕРИТЕ В СЛУЧАЕ ... КОГДА ... ТО - PullRequest
1 голос
/ 24 июня 2011

Я использую скрытый внутренний параметр (@DoorHelper), чтобы проверить, содержит ли другой параметр, который я использую (@Door), специальное значение, которое я использую, чтобы представить «глобальный» («9999») и вернуть все двери в этом случае.

SELECT 
CASE 
WHEN ('9999'+'-'+ RIGHT(Unknown1,1) in (@Door)) 
THEN (SELECT DISTINCT [Zone]+' - '+CAST([OfficeID] as char(5)) FROM [ADB].[dbo].[ZoneByOffice])
ELSE (@Door)
END AS ZoneID
FROM [ADB].[dbo].[EventLog]

Проблема в том, что возвращение более 1 результата из THEN приводит к ошибкам.

Как я могу преобразовать этот SQL, чтобы сделать то, что я хочу?

1 Ответ

1 голос
/ 24 июня 2011

Вы можете использовать TOP 1

SELECT 
    CASE 
        WHEN ('9999'+'-'+ RIGHT(Unknown1,1) in (@Door)) 
        THEN (SELECT TOP 1 [Zone]+ ' - '+ CAST([OfficeID] as char(5)) FROM [ADB].[dbo].[ZoneByOffice])
        ELSE (@Door)
    END AS ZoneID
FROM [ADB].[dbo].[EventLog]

или ограничить результирующий набор условием WHERE уникальным полем, если оно есть, чтобы гарантировать, что оно никогда не вернет более одной строки.

...