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在最终选择列表中使用以下值替换nullX

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 回答