sql-server - SQL Server : how can I use COALESCE with a PIVOT table?

标签 sql-server pivot coalesce

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

数据透视表

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”放在那里,如果没有,则没有。虽然我不知道如何做到这一点。也许这是错误的方法。如果我泄露了一些信息,请告诉我。谢谢!

最佳答案

是的,您可以使用 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 的数据类型列,您可能需要强制转换/转换值,以便可以用字符串替换空值。

如果您必须转换数据类型,查询将是:
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 |

关于sql-server - SQL Server : how can I use COALESCE with a PIVOT table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15789738/

相关文章:

sql - 为什么在 where 子句中对 char 字段使用 coalesce 时查询结果会发生变化?

sql-server - 条件为 COALESCE 的 SQL JOIN 是重复行

sql-server - 在 SQL Server 中使用 xml 列是否正式需要 ansi_padding 'on'?

具有动态列的 MySQL 数据透视表查询

c# - 从自引用数据库表填充递归数据结构

sql - '1' 附近的语法不正确。 SQL Pivot 需要 ID、QUOTED_ID 或 '.' 错误

sql - PostgreSQL 如何将行转换为列

mysql - 使用合并检查与数据库端重叠的范围

sql-server - 将本地托管的 drupal 7 与远程 SQL Server 2000 数据库或 Oracle 10g 连接

sql-server - 适用于 Amazon RDS 的 SQL Server 报告服务