1

我在 SQL Server 中有一个 Pet.Info 表,如下所示:

pet      age ...
--------------------
dog       4
cat       3
pig       2
dog       3
...

现在,我想把它转换成一个表格来计算狗和猫的平均年龄,以及所有其他人的平均年龄。如下所示:

dog    cat   others
-------------------------
3.5      3       2

可以用 PIVOT 做到这一点吗?

这是我得到的,但似乎没有办法让它成为其他人的专栏

SELECT * FROM 
(SELECT * FROM Pet.Info) AS B
PIVOT (AVG(age) FOR pet IN ([dog],[cat])) AS C

感谢您提前提供建议。

4

2 回答 2

3

尝试这个:

SELECT * 
FROM (  SELECT  CASE WHEN pet NOT IN ('dog','cat') THEN 'others' ELSE pet END pet, 
                age
        FROM Pet.Info) AS B
PIVOT (AVG(age) FOR pet IN ([dog],[cat],[others])) AS C
于 2013-01-07T21:02:10.737 回答
1

您不需要为此使用枢轴。

select avg(case when pet = 'dog' then age end) as dog,
       avg(case when pet = 'cat' then age end) as cat,
       avg(case when pet in ('dog', 'cat') then null else age end) as others
from pet.info

对于其他人,我设置了语句,以便将 NULL 包含在其他人中。

于 2013-01-07T21:03:08.353 回答