SQL Server-PIVOT ON CASE语句

SQL Server - PIVOT on CASE statement(SQL Server-PIVOT ON CASE语句)
本文介绍了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语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)