0

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
4

1 に答える 1

2

CASE の代わりに AND / OR 演算子とネストされた条件を使用する必要があります。

(@StateCount > 10 AND u.StateID = @StateID) OR (@CityCount > 10 AND CityID = @CityID) OR (CountryID = '1')

このようなものもあります。

更新:

したがって、実際には、この例は適切に機能しませんでした。より複雑な where 句が必要です。これを試して:

(@StateCount > 10 AND u.StateID = @StateID)
OR
(@CityCount > 10 AND @StateCount <= 10 AND CityID = @CityID)
OR
(@StateCount <= 10 AND @CityCount <= 10 AND CountryID = '1')

更新 2

そして、これは少し良いです:

(@StateCount > 10 AND u.StateID = @StateID)
OR
(@StateCount <= 10 
    AND
    (
        (@CityCount > 10 AND CityID = @CityID)
        OR
        (@CityCount <= 10 AND CountryID = '1')
    )   
)
于 2012-04-13T08:37:20.260 に答える