繁体   English   中英

SQL Server:如何将COALESCE与PIVOT表一起使用?

[英]SQL Server: how can I use COALESCE with a PIVOT table?

我想要做的是提供一个值,如果我的数据透视表中不存在另一个值。

数据透视表

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”放在那里,如果用户被分配了该项目,但如果没有则。 虽然我无法找到如何做到这一点。 也许这是错误的做法。 如果我发布一些信息,请告诉我。 谢谢!

是的,您可以在最终选择列表中使用COALESCEnull值替换为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 |

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM