![](/img/trans.png)
[英]How can i return Pivot table in sql server with column name?
[英]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”放在那里,如果用戶被分配了該項目,但如果沒有則。 雖然我無法找到如何做到這一點。 也許這是錯誤的做法。 如果我發布一些信息,請告訴我。 謝謝!
是的,您可以在最終選擇列表中使用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
列的數據類型,您可能必須轉換/轉換該值,以便可以使用字符串替換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.