3

PIVOT 操作の「フォールバック」または「else」ケースを定義することは可能ですか? MSDN のサンプルで遊んでみましょう。

-- Pivot table with one row and five columns
SELECT
    'AverageCost' AS Cost_Sorted_By_Production_Days, 
    [0], [1], [2], [3], [4],
    [??magicalELSEkeyword??] as 'too many days'

FROM
(
    SELECT DaysToManufacture, StandardCost 
    FROM Production.Product
) AS SourceTable

PIVOT
(
    AVG(StandardCost)
    FOR DaysToManufacture IN
    (
        [0], [1], [2], [3], [4],
        [??magicalELSEkeyword??]
    )
) AS PivotTable;

ピボットの動作は非常に明白です。指定された値のリストの出現を選択/ケース/グループ化します。私が見たいのは「フォールバック」ケースです。上記のクエリでは、次のものを取得したいと思います。

  • 「瞬時」の 0 日プロセスの平均コスト
  • 1 日のプロセスの平均コスト
  • ...
  • 4 日間のプロセスの平均費用
  • その他すべての平均コスト

「募集中」のケースのリストは一定であり、既知であることに注意してください。不明な列数のピボットを生成したくありません。すべての一致しない値を「その他」という名前の単純な結果としてグループ化したいだけです

MSDNの T-SQL 構文リファレンスでそのような可能性を見たことがありません。これが利用できないとは信じがたいです. ..

ええ、おそらく「その他」に表示される NULL 値を処理するかどうか、および処理する方法についての議論が導入されることはわかっていますが、それは 2 つの特別なケースにすぎません..他の集計関数と同様に無視される可能性があります。実装し、100% 問題なく、残りの SQL と一貫性があります。または、ELSE-NOT-NULL と ELSE-OR-NULL のような 2 つの異なるフォールバック キーワードで処理することもできます。

この機能は本当に欠けていますか?

4

1 に答える 1

5

残念ながら、をステートメントに配置することはできないため、サブクエリに配置otherします。次に、これらの新しい値を使用します。ELSECASEPIVOT

select *
from
(
  select StandardCost,
    case DaysToManufacture
      when 0 then '0'
      when 1 then '1'
      when 2 then '2'
      when 3 then '3'
      when 4 then '4'
      else 'Others' end as DaysToManufacture
  from Product
) src
pivot
(
  avg(StandardCost)
  for DaysToManufacture in ([0], [1], [2], [3], [4], [Others])
) piv

デモで SQL Fiddle を参照してください

于 2013-02-01T15:35:26.997 に答える