Я пытаюсь изменить предложение WHERE
в зависимости от того, сколько людей существует в каждом штате или городе.Использование оператора CASE в SQL Server Предложение WHERE
Если есть более 10 людей в состоянии Я хочу WHERE
быть:
WHERE u.StateID = @StateID
Если есть более 10 людей в городе, я хочу, чтобы это было:
WHERE u.CityID = @CityID
вместо
WHERE u.StateID = @StateID
Если есть не более 10 человек в любом городе или государстве, я хочу, чтобы это было :
WHERE u.CountryID = '1'
ALTER PROCEDURE GetHighscore
(@UserID int)
AS
BEGIN
Declare @StateCount int
Declare @CityCount int
Declare @StateID int
Declare @CityID int
SELECT @StateID=StateID FROM tblUser WHERE UserID = @UserID
SELECT @CityID=CityID FROM tblUser WHERE UserID = @UserID
SELECT @StateCount=COUNT(DISTINCT tblUserTrix.UserID)
FROM tblUserTrix INNER JOIN
tblUser ON tblUserTrix.UserID = tblUser.UserID
WHERE (tblUser.StateID = @StateID)
SELECT @CityCount=COUNT(DISTINCT tblUserTrix.UserID)
FROM tblUserTrix INNER JOIN
tblUser ON tblUserTrix.UserID = tblUser.UserID
WHERE (tblUser.CityID = @CityID)
SELECT TOP 10 ut.UserID, SUM(t.Hardness) AS TotalTrixPoints, u.FirstName, u.LastName, u.StateID, u.CityID, tblSweCitys.CityName
FROM tblUserTrix AS ut INNER JOIN
tblUser AS u ON ut.UserID = u.UserID INNER JOIN
tblState ON u.StateID = tblState.StateID INNER JOIN
tblCitys ON u.CityID = tblCitys.CityID LEFT OUTER JOIN
tblTrix AS t ON ut.TrixID = t.TrixID
WHERE CASE
WHEN @StateCount > 10
THEN u.StateID = @StateID
WHEN @CityCount > 10
THEN u.CityID = @CityID
ELSE u.CountryID = '1'
END = ?
GROUP BY ut.UserID, u.FirstName, u.LastName, u.CityID, u.StateID, tblCitys.CityName
ORDER BY TotalTrixPoints DESC
END
Это звучит как очень плохая идея - вы должны выяснить количество ** людей ** (это правильное множественное число «человек» на английском языке) в городе или штате сначала, прежде чем вы сможете решить, как построить свой SQL-запрос динамически ...... –
okey, я постараюсь запомнить этот Марк. Количество людей в каждом городе или штате я получаю от StateCount и CityCount. – user1007103