Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在SQL Server WHERE子句中使用CASE语句_Sql Server 2008 - Fatal编程技术网

Sql server 2008 在SQL Server WHERE子句中使用CASE语句

Sql server 2008 在SQL Server WHERE子句中使用CASE语句,sql-server-2008,Sql Server 2008,我试图根据每个州或城市的人口数量来更改WHERE子句 如果一个州有超过10人,我希望的位置是: WHERE u.StateID = @StateID 如果一个城市的人口超过10人,我希望是: WHERE u.CityID = @CityID WHERE u.CountryID = '1' ALTER PROCEDURE GetHighscore (@UserID int) AS BEGIN Declare @StateCount int Declare @CityCount int

我试图根据每个州或城市的人口数量来更改
WHERE
子句

如果一个州有超过10人,我希望
的位置是:

WHERE u.StateID = @StateID 
如果一个城市的人口超过10人,我希望是:

WHERE u.CityID = @CityID 
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
而不是

WHERE u.StateID = @StateID
如果城市或州的人口不超过10人,我希望是:

WHERE u.CityID = @CityID 
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

必须使用和/或运算符和嵌套条件,而不是大小写

(@StateCount > 10 AND u.StateID = @StateID) OR (@CityCount > 10 AND CityID = @CityID) OR (CountryID = '1')
有些人喜欢这样

UPDADE

所以,这个例子对你来说确实不太合适。您需要更复杂的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')
(@StateCount>10和u.StateID=@StateID)
或

(@CityCount>10和@StateCount这听起来真是个糟糕的主意-你必须找出人数(这是英语中“person”的正确复数)首先在一个城市或州,在您决定如何动态构建SQL语句之前……好的,我将试着记住Marc。每个城市或州的人口数量可以从StateCount和CityCount中获得。好的,但是即使一个城市有50人,我也不会得到该城市的高分,因为有or(CountryID='1')每个人都有countryID 1。正因为如此,我让每个人都在高分,而不仅仅是城市。更新答案。这是完整的指定标准。它可以通过使用嵌套条件进行优化。