Помощь объединений и дел - PullRequest
0 голосов
/ 21 февраля 2011

Я пытаюсь создать оператор case, который определит, на каком уровне находится каждый пользователь в нашей системе .. Platinum, Gold, Silver, Bronze ..... Этот запрос входит в отчет SSRS, гдеознание будет быть выбранным из выпадающего списка ... Я изучал примеры использования и понимаю очень упрощенные примеры того, как его создать, но я не могу заставить его работать без моих запросов, в которых есть объединения .... Это мое первый запрос на бронзовый уровень.

SELECT XEI.EmployeeId as id, SUM(Credits) , XEI.IsSpouse
FROM Employees E 
JOIN XREFEmployeesInvitations XEI ON E.Id = XEI.EmployeeId 
JOIN Activities A ON XEI.ActivityId = A.Id
JOIN Locations l on l.Id=E.LocationId
JOIN Facilities f on f.Id=l.FacilityId
WHERE   F.Code = COALESCE(@facilityCode, F.Code) 
and E.Id IN (SELECT EmployeeId FROM XREFEmployeesInvitations WHERE ActivityId = 10 ANd IsCompleted = 1)
and XEI.IsCompleted=1
GROUP BY XEI.EmployeeId, XEI.IsSpouse 
HAVING SUM(Credits) between 50 and 99

1 Ответ

0 голосов
/ 21 февраля 2011

Попробуйте обернуть его в другую проекцию, например,

select id, 
"Status" =
        case 
             when credits > 200 and  credits < 300 then 'Silver'  
             when credits > 300 then 'Gold' 
             else 'Bronze'
        end 
        , IsSpouse
from (
    SELECT XEI.EmployeeId as id, SUM(Credits) as credits , XEI.IsSpouse as IsSpouse
    FROM Employees E 
    JOIN XREFEmployeesInvitations XEI ON E.Id = XEI.EmployeeId 
    JOIN Activities A ON XEI.ActivityId = A.Id
    JOIN Locations l on l.Id=E.LocationId
    JOIN Facilities f on f.Id=l.FacilityId
    WHERE   F.Code = COALESCE(@facilityCode, F.Code) 
    and E.Id IN (SELECT EmployeeId FROM XREFEmployeesInvitations WHERE ActivityId = 10 ANd IsCompleted = 1)
    and XEI.IsCompleted=1
    GROUP BY XEI.EmployeeId, XEI.IsSpouse 
    HAVING SUM(Credits) between 50 and 99
) 
...