本文介紹了SQL Server-PIVOT ON CASE語句的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一張這樣的表:
Store Holiday Date_Index Temp
123 XMAS t_0 34.9
234 XMAS t_1 M
123 XMAS t_1 22.3
123 XMAS t_2 28.5
我正試圖將其轉移到如下內容:
Store Holiday t_0 t_1 t_2
123 XMAS 34.9 22.3 28.5
234 XMAS 32.1 NULL 29.5
使用:
Select *
from
(
select Store, Holiday, Date_Index, Temp
from myTable
)
PIVOT
(
sum(CASE WHEN ISNUMERIC(Temp) = 1 THEN cast(Temp as decimal) ELSE NULL END)
FOR DATE_INDEX IN ([t_0],[t_1],[t_2])
) as PivotTable;
我的問題是TEMP列包含字母和數字的混合。我試圖將焦點放在CASE語句的總和上,但收到了錯誤消息。如何正確補償非數字字符?
推薦答案
您不能這樣做。但是,您可以在錨查詢中這樣做:
Select *
from
(
select Store, Holiday, Date_Index,
CASE WHEN ISNumeric(Temp) = 1 THEN CAST(Temp AS DECIMAL(10, 2)) ELSE 0 END AS Temp
from myTable
) as t
PIVOT
(
sum(Temp)
FOR DATE_INDEX IN ([t_0],[t_1],[t_2])
) as P;
我使用了內置的ISNUMERIC
函數將這些非數值替換為0,并將整個列強制轉換為透視之前的decimal
。然后在pivot
中使用SUM(temp)
。
demo
結果:
| Store | Holiday | t_0 | t_1 | t_2 |
|-------|---------|--------|------|--------|
| 123 | XMAS | 34.9 | 22.3 | 28.5 |
| 234 | XMAS | (null) | 0 | (null) |
這篇關于SQL Server-PIVOT ON CASE語句的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,