dav*_*mcd 3 sql-server pivot coalesce
我想做的是提供一个值,如果我的数据透视表中不存在另一个值。
数据透视表
SELECT *
FROM MyTable
PIVOT ( MAX(Number) for Total in ([Bob], [Jim], [Carol], [Simon])) as MaxValue
Run Code Online (Sandbox Code Playgroud)
结果
Item | Bob | Jim | Carol | Simon
Item1 3 4 7
Item2 2 9 1
Item3 5
Run Code Online (Sandbox Code Playgroud)
我要在上面的表格上尝试改进的是,如果没有编号,则显示该人是否已分配了项目。
预期结果
Item | Bob | Jim | Carol | Simon
Item1 3 4 X 7
Item2 2 9 1 X
Item3 X X X 5
Run Code Online (Sandbox Code Playgroud)
我有一列(上面已注释掉),如果该人被分配了该项目,则该列具有该人的名字,但是我在想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
Run Code Online (Sandbox Code Playgroud)
请注意,根据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
Run Code Online (Sandbox Code Playgroud)
请参阅带有演示的SQL Fiddle。返回:
| ITEM | BOB | JIM | CAROL | SIMON |
-------------------------------------
| item1 | 3 | 4 | X | 7 |
| item2 | 2 | 9 | 1 | X |
| item3 | X | X | X | 5 |
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8043 次 |
| 最近记录: |