在SQL中使用多个可能嵌入的CASE条件

时间:2019-06-30 18:09:12

标签: sql sql-server

目前,我正在发现有多少具有特定等级的球员在不同获胜百分比的球队中。我希望能够执行此查询,但是要经过多年,而不只是一年。我当前的查询如下。

SELECT ROUND(Wins, 1) AS 'Winning Percentage',
SUM(CASE WHEN Rating >= 2 and Rating < 5 THEN 1 ELSE 0 END) AS Rating1,
SUM(CASE WHEN Rating >= 5 and Rating < 7 THEN 1 else 0 END) AS Rating2,
SUM(CASE WHEN Rating >= 7 and Rating < 100 THEN 1 ELSE 0 END) AS Rating3 
FROM #temp_table
GROUP BY ROUND(Wins, 1)
ORDER BY ROUND(Wins, 1)

预期结果如下。

Win %    Rating1 Rating 2 Rating 3
0-25%    3       4        2
25%-100% 4       2        1

在#temp_table中,我有多年的WHERE子句。我希望能够执行上面的代码,但是要跨多年。 #temp_table当前具有一个@Year变量,我必须手动输入该变量来生成每个#temp_table。

My #temp_table is shown below.

Player Rating Year Win % 
Bonds  10     2014  25%
Smith  2      2011  42%
Bryant 5      2013  33%

1 个答案:

答案 0 :(得分:0)

您可以创建一个case,它将创建两个组-0-25%25%-100%。然后group by此表达式。您可以如上所述将year添加到查询中。

SELECT case when Wins < 25 then '0-25%'
            when Wins between 25 and 100 then '25%-100%' end  AS 'Winning Percentage',
    year,
    SUM(CASE WHEN Rating >= 2 and Rating < 5 THEN 1 ELSE 0 END) AS Rating1,
    SUM(CASE WHEN Rating >= 5 and Rating < 7 THEN 1 else 0 END) AS Rating2,
    SUM(CASE WHEN Rating >= 7 and Rating < 100 THEN 1 ELSE 0 END) AS Rating3 
FROM #temp_table
GROUP BY case when Wins < 25 then '0-25%'
            when Wins between 25 and 100 then '25%-100%' end,
            year