各州または市に存在する人の数に応じてWHERE
節を変更しようとしています。SQL ServerのWHERE句でCASE文を使用する
私はWHERE
になりたい状態でもっとして10人がある場合:
WHERE u.CityID = @CityID
:私はそれになりたい都市でもっとして10人がいる場合
WHERE u.StateID = @StateID
は、
代わりの
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ステートメントを動的に構築する方法を決定する前に、都市または州で最初に**(これは英語の適切な複数の「人」の複数のものです)...... –
オーク、私はそのマークを覚えようとします。各都市または州の人数は、StateCountとCityCountから取得します。 – user1007103