5

私がやろうとしているのは、ピボット テーブル内に別の値が存在しない場合に値を提供することです。

ピボットテーブル

SELECT *
  FROM MyTable
 PIVOT ( MAX(Number) for Total in ([Bob], [Jim], [Carol], [Simon])) as MaxValue

結果

Item    |   Bob   |   Jim   |  Carol  |  Simon
Item1        3         4                   7
Item2        2         9         1
Item3                                      5

上の表を改善しようとしているのは、番号がない場合にその人にアイテムが割り当てられているかどうかを示すことです。

期待される結果

Item    |   Bob   |   Jim   |  Carol  |  Simon
Item1        3         4         X         7
Item2        2         9         1         X
Item3        X         X         X         5

人にそのアイテムが割り当てられている場合はその人の名前を含む列 (上記でコメントアウトされています) がCOALESCEありますが、ユーザーにアイテムが割り当てられている場合はそこに「X」を配置するために使用できるかもしれないと考えていましたが、そうでない場合は何もありません。これを行う方法を見つけることはできませんが。おそらくこれは間違ったアプローチです。何か情報を出したら教えてください。ありがとう!

4

1 に答える 1

6

はい、COALESCE最後の選択リストで使用して、null値を次のように置き換えることができますX

SELECT Item, 
  coalesce([Bob], 'X') Bob, 
  coalesce([Jim], 'X') Jim, 
  coalesce([Carol], 'X') Carol, 
  coalesce([Simon], 'X') Simon
FROM MyTable
PIVOT
(
  MAX(Number) 
  for Total in ([Bob], [Jim], [Carol], [Simon])
) as MaxValue

列のデータ型によってはTotal、値をキャスト/変換して、null を文字列に置き換える必要があることに注意してください。

データ型を変換する必要がある場合、クエリは次のようになります。

SELECT Item, 
  coalesce(cast([Bob] as varchar(10)), 'X') Bob, 
  coalesce(cast([Jim] as varchar(10)), 'X') Jim, 
  coalesce(cast([Carol] as varchar(10)), 'X') Carol, 
  coalesce(cast([Simon] as varchar(10)), 'X') Simon
FROM MyTable
PIVOT
(
  MAX(Number) 
  for Total in ([Bob], [Jim], [Carol], [Simon])
) as MaxValue

SQL Fiddle with Demoを参照してください。これは以下を返します:

|  ITEM | BOB | JIM | CAROL | SIMON |
-------------------------------------
| item1 |   3 |   4 |     X |     7 |
| item2 |   2 |   9 |     1 |     X |
| item3 |   X |   X |     X |     5 |
于 2013-04-03T14:17:10.897 に答える