SQL Server-PIVOT ON CASE语句 [英] SQL Server - PIVOT on CASE statement

查看:0
本文介绍了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语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆