sql - 即使变量/列已经是浮点数据类型,也将数据类型 varchar 转换为浮点数时出错
问题描述
我在 SQL Server 2012 (v11) 中运行。我知道许多其他人围绕这个问题提出了问题,但没有一个对我自己的困境特别有帮助。我还有两个问题要解决,非常感谢您提供帮助。
在某些情况下,我目前正在尝试(目标 1)转置一个包含三个单独的唯一 ID 和一些在 5 年内收集的调查数据的表。目前,该表的结构使得一个记录等同于 5 年中任何一年的单个调查数据。但是,我想转置数据,以便一条记录等同于个人的全部调查数据。我试图通过使用过去成功实现的交叉表来实现这一目标。
但是,我的(目标 2)当前问题是我不断收到以下错误:
消息 8114,级别 16,状态 5,第 89
行将数据类型 varchar 转换为浮点数时出错。
让我感到困惑的是,在下面的代码中,EntityID 在第 89 行,但它是一个数字,并且已经作为浮点数据类型存储在 SQL 中。那么为什么我会收到此错误消息?
这是我的参考代码,非常欢迎任何可以更好地实现目标 1 的建议。
SELECT EntityID
, insig_id
, UserID
, Cohort
, SUM(CASE WHEN MY = '1' THEN pam_score ELSE NULL END) AS MY1_PAM_SCR
, SUM(CASE WHEN MY = '1' THEN pam_lvl ELSE NULL END) AS MY1_PAM_LVL
, MAX(CASE WHEN MY = '1' THEN srvy_date ElSE NULL END) AS MY1_SVY_DAT
, SUM(CASE WHEN MY = '2' THEN pam_score ELSE NULL END) AS MY2_PAM_SCR
, SUM(CASE WHEN MY = '2' THEN pam_lvl ELSE NULL END) AS MY2_PAM_LVL
, MAX(CASE WHEN MY = '2' THEN srvy_date ElSE NULL END) AS MY2_SVY_DAT
, SUM(CASE WHEN MY = '3' THEN pam_score ELSE NULL END) AS MY3_PAM_SCR
, SUM(CASE WHEN MY = '3' THEN pam_lvl ELSE NULL END) AS MY3_PAM_LVL
, MAX(CASE WHEN MY = '3' THEN srvy_date ElSE NULL END) AS MY3_SVY_DAT
, SUM(CASE WHEN MY = '4' THEN pam_score ELSE NULL END) AS MY4_PAM_SCR
, SUM(CASE WHEN MY = '4' THEN pam_lvl ELSE NULL END) AS MY4_PAM_LVL
, MAX(CASE WHEN MY = '4' THEN srvy_date ElSE NULL END) AS MY4_SVY_DAT
, SUM(CASE WHEN MY = '5' THEN pam_score ELSE NULL END) AS MY5_PAM_SCR
, SUM(CASE WHEN MY = '5' THEN pam_lvl ELSE NULL END) AS MY5_PAM_LVL
, MAX(CASE WHEN MY = '5' THEN srvy_date ElSE NULL END) AS MY5_SVY_DAT
into #svy_onerow
FROM #svy_counter2
GROUP BY EntityID, UserID, insig_id, Cohort
ORDER by insig_id
在此先感谢您,伟大的人可以提供的任何帮助。
谢谢!
解决方案
第 89 行的错误消息是代码块,不一定是第 89 行。由于您有多个函数引用 #svy_counter2 中的 3 个字段,因此您需要确认 pam_score、pam_lvl 和 srvy_date 是这些函数的有效数据类型。我已经看到日期存储在 varchar 字段('20190101')中,如果您尝试获取最大值,除非您明确地将其转换为日期、日期时间数据类型,否则您将无法获得所需的内容。
尝试这样的事情:
select distinct cast(pam_score as float) from #svy_counter2
select distinct cast(pam_lvl as float) from #svy_counter2
select distinct cast(srvy_date as datetime) from #svy_counter2
看看其中一个是否对您有错误。这将告诉您该领域是问题所在。
推荐阅读
- python - 如何在“评估”模式下编译 ast 节点
- c++ - 如何从构造函数声明新的私有变量?
- c - C中的指针:分配内存与赋值VS分配内存而不赋值
- git - 更改 git 查看的 .ssh 公钥的位置
- python - 如何为张量流/服务模型预处理数据?
- facebook - 尝试登录facebook时如何解决错误的签名代码190
- c - 如何使用 GSL 库从两个复杂变量中插入一个复杂函数?
- angular - 如何修复 'ERROR TypeError: 无法读取 ANGULAR 中未定义的属性'用户名''
- ios - 为什么苹果在压缩之前对 .ipa 进行加密?
- python-3.x - 使用自定义输入训练 spacy 模型