構文で示したように、PIVOT演算子の1つ以上の集約関数を指定します。
PIVOT演算子では、CLOB、BLOB、UDT、XMLまたはJSONデータ型の列は使用できません。
列名はINリスト内では使用できません。値または式(MODやABSなどの算術式、またはLENGTH、REVERSEなどの文字列操作式)のみを使用できます。
PIVOT演算子のpivot列およびmeasure列は、SELECT文の割り当てリストでは使用できません。
集約関数の個数としてnが指定され、nが1より大きい場合は、少なくとも(n-1)個の集約関数に別名を指定する必要があります。
derived_table_nameで指定されたcnameは、INリストから派生した別名よりも優先されます。
IN句にリストされる列値に別名が指定されない場合、データベース処理では列値が二重引用符で囲まれ、デフォルトの形式を使用してそれらの文字列リテラルが別名に変換されます。別名は、ピボット テーブルの列名として使用されます。
列値から派生した別名の長さが、128文字(EONが有効な場合)または30文字(EONが有効でない場合)の別名の制限を超える場合は、別名が切り捨てられます。
INリストに'abc'や'ABC'などの大文字/小文字の区別のある値が含まれる場合、それらの値は同じ値として処理され、エラーが発生します。
PIVOTは、PIVOT演算子のクエリーソースとして、UNPIVOTまたはTD_UNPIVOT関数をサポートしています。
PIVOT/UNPIVOT演算子は、行を列に、または列を行に変換する、1次元の方法を使用します。単一のクエリー内の行と列の両方を入れ替えることができます(例えば、UNPIVOTをソースとしてPIVOTに使用します)。これにより、テーブルでのデータ交換の2次元メソッドを使用する場合に、柔軟性を得ることができます。
UNPIVOTのDT列リストをクエリー ソースとしてPIVOTに使用することは、オプションです。
- WITH演算子を使用して集約関数を1つ以上指定する必要があります。
- SUM、AVG、MIN、およびMAX集約関数がサポートされています。
- derived_table_nameで指定されたcnameは、集約結果の列に対して派生した別名よりも優先されます。
- DISTINCTキーワードは集約列ではサポートされていません。
- アスタリスク(*)が指定されている場合、列リストは使用できません。
- 集約された値が関連付けられていない場合、列リストまたは * を集約しても無意味な結果が生じる可能性があります。例えば、一部のpivot列がSUMに対応し、一部がAVGに対応している場合、WITH SUM(*)は意味のある値にはなりません。
- 集約関数に指定される列名は、PIVOT列またはPIVOT列の部分集合である必要があります。
- 別名はINリストで使用できません。
- PIVOT派生テーブルの別名は使用できません。
- サブクエリーのSELECTリストには、1つの列参照のみを含める必要があります。
- サブクエリーで1つ以上の行を返す必要があります。
- サブクエリーによって返される結果は32KB以内とし、行数は16行以下にする必要があります。
- INリスト内のサブクエリーを持つPIVOTクエリーでは、SET演算は使用できません。
- INリストのサブクエリーによって生成された列は、SELECTで明示的に使用することはできません。
- DDL文または複数文リクエストを含むPIVOT INリストのサブクエリーは使用できません。
- PIVOTクエリーにWITH句とINリストのサブクエリーの両方を含めることはできません。
幅広いテーブルの例については、ピボット例を参照してください。