2017-11-19 3 views
1

ピボットを年単位でグループ化するにはどうすればよいですか?年次ピボットグループ

SELECT YEAR(bolfecha) ,pvt.[C],PVT.[P] 
FROM 
(select bolfecha, bolestado 
from Tbboleta) as src 

PIVOT 
(
COUNT(bolestado) 
FOR bolestado IN ([C], [P]) 
) AS pvt; 

Bolfechaそれはように2006年のすべてのレジスタ、その後、だけではなく2005年までにそれらをグループ化する毎年私を与える、このコードを使用する2005-02-01 ようなものだ日付を持っているコラムです。 ..

「C」と「P」がカラムボレースタッドにどれだけ登録されているかを調べようとしていますが、それは機能しますが、年によってグループ化することはできません。pls このように

2005 53 3 
2006 2 0 
2006 2 0 
2006 6 0 

です。 。 。

2005それは実際にグループ化された唯一のものだと私はなぜわからない 編集:オハイオ州私はそれが唯一のグループである理由を知っている2005年12月31日2005年の行

+0

どの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品を使用していますか? "_SQL_"はクエリ言語であり、特定のデータベース製品の名前ではありません。 –

答えて

1

GROUP BYを使用してデータをグループ化してから、PIVOTを使用して行データを列に変換します。意図したとおりにグループ化

まず、:

SELECT YEAR(bolfecha) [Year], bolestado, COUNT(*) ItemCount FROM Tbboleta 
GROUP BY YEAR(bolfecha), bolestado 

これは、この結果を生成します。そして、

Year bolestado  ItemCount 
2005   C  10 
2005   P  7 
2006   C  3 
2006   P  8 

今、あなたは、この結果セットを使用してにピボットを適用することができます。

SELECT * FROM 
(
    SELECT YEAR(bolfecha) [Year], bolestado, COUNT(*) ItemCount FROM Tbboleta 
    GROUP BY YEAR(bolfecha), bolestado 
) RawData 
PIVOT (
    MIN(ItemCount) FOR bolestado IN (C, P) 
) PivotData 

これはあなたにこの結果をもたらします:

Year  C  P 
2005 10  7 
2006  3  8 

PIVOT必要な値を選択し、簡単な集計関数に基づいて、これらの値の列を作成することができます(SUMMINAVGCOUNT ...)しかし、あなたはできないグループを同時に。グループが必要な場合は、PIVOTを実行する前にGROUP BYを使用して個別に行う必要があります。

+0

こんにちは、このエラーメッセージ8155、レベル16、状態2、行23 'Rawdata'の列1に列名が指定されていません。あなたの答えをありがとう私はちょうど何かが残っているかもしれないコードをコピーしていますか? –

+0

私はコードを実行していないので、厳密には有効ではないかもしれませんが、私はそれにどのようにアプローチするかという考えを共有したいと思います。いくつかのテストデータを作成してテストしようとします。しかし、あなたが持っているエラーは非常にYEAR(bolfecha)にエイリアスを追加するだけで解決するのが簡単です。 –

+0

@ NaruLopoあなたが持っている問題を解決するための答えを編集しました。今試してみてください。 –

関連する問題