簡體   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