1

SQLServerに次のようなテーブル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 に答える