Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql Can';我不理解为什么使用强制转换错误而使用转换错误却不能?_Tsql_Reporting Services_Ssrs 2012 - Fatal编程技术网

Tsql Can';我不理解为什么使用强制转换错误而使用转换错误却不能?

Tsql Can';我不理解为什么使用强制转换错误而使用转换错误却不能?,tsql,reporting-services,ssrs-2012,Tsql,Reporting Services,Ssrs 2012,执行时没有任何问题的以下代码: Select #ICDCodes.ICD_Code, #ICDCodes.Description, Count(#DiseaseIndex.VstIntID) AS 'Total Count', Sum(DATEDIFF(dd,#DiseaseIndex.AdmitDtSrt,#DiseaseIndex.DschrgDtTm )) as 'Total LOS', ISNULL(AVG(CONVERT(NUMERIC(8,2),DATEDIFF(DAY,#Dise

执行时没有任何问题的以下代码:

Select 
#ICDCodes.ICD_Code,
#ICDCodes.Description,
Count(#DiseaseIndex.VstIntID) AS 'Total Count',
Sum(DATEDIFF(dd,#DiseaseIndex.AdmitDtSrt,#DiseaseIndex.DschrgDtTm )) as 'Total LOS',
ISNULL(AVG(CONVERT(NUMERIC(8,2),DATEDIFF(DAY,#DiseaseIndex.AdmitDtSrt,#DiseaseIndex.DschrgDtTm))),0) as 'Total Avg LOS'
FROM #DiseaseIndex LEFT JOIN #ICDCodes on #DiseaseIndex.VstIntID = #ICDCodes.VstIntID
WHERE ICD_Type IN ('P','S')
GROUP BY #ICDCodes.ICD_Code, #ICDCodes.Descriptio
但是这段代码抛出了一个错误:

SELECT
#ICDCodes.ICD_Code, 
#ICDCodes.Description, 
Count(#DiseaseIndex.VstIntID) AS 'Total Count', 
Sum(CAST(DATEDIFF(dd,#DiseaseIndex.AdmitDtSrt,#DiseaseIndex.DschrgDtTm )AS NUMERIC(8,2))) AS 'Total LOS', 
ISNULL(CAST(DATEDIFF(DAY,#DiseaseIndex.AdmitDtSrt,#DiseaseIndex.DschrgDtTm) AS NUMERIC(8,2)),0) as 'Total Avg LOS'
FROM #DiseaseIndex LEFT JOIN #ICDCodes on #DiseaseIndex.VstIntID = #ICDCodes.VstIntID
WHERE ICD_Type IN ('P','S') 
GROUP BY #ICDCodes.ICD_Code, #ICDCodes.Description`
这是它产生的错误:

Msg 8120,第16级,状态1,第191行
列“#DiseaseIndex.AdmitDtSrt”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

Msg 8120,第16级,状态1,第191行
列“#DiseaseIndex.DschrgDtTm”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

基本上,除了一组使用
CAST()
和另一组使用
CONVERT()

有人能解释一下为什么
CAST
需要将日期添加到
groupby
语句中,而
CONVERT
则不需要

提前感谢

更新 在第二个查询中,您忘记了
AVG

第一个问题:
为空(
平均值(
转换(数字(8,2),日期差(日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日

第二个问题:

ISNULL(将日期diff(DAY,#DiseaseIndex.AdmitDtSrt,#DiseaseIndex.dschrgdtm)转换为数字(8,2)),0)转换为“总平均服务水平”

第一版: (这对于问题的第一个版本是正确的。)

这是因为在
转换中使用
数值(8,2)
,而在
转换中使用
十进制(8,2)

尽管numeric和decimal是可互换的同义词,但GROUPBY子句中有一个numeric,select子句中有一个decimal将导致该错误

下面是一个简单的演示:

DECLARE @T AS TABLE
(
    col1 int,
    col2 int
)

INSERT INTO @T VALUES
(1,1),(2,1),(3,1),
(4,2),(5,2),(6,2),
(7,3)

SELECT  CAST(Col2 as NUMERIC(8,2)), 
        AVG(Col1)
FROM @T
GROUP BY CONVERT(DECIMAL(8,2), Col2)
结果:

1.00    2
2.00    5
3.00    7
列'@T.col2'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

但是,如果将select更改为十进制,或将group by更改为数字,则错误消息将消失,select将返回结果集:

SELECT  CAST(Col2 as DECIMAL(8,2)), 
        AVG(Col1)
FROM @T
GROUP BY CONVERT(DECIMAL(8,2), Col2)
结果:

1.00    2
2.00    5
3.00    7

更新 在第二个查询中,您忘记了
AVG

第一个问题:
为空(
平均值(
转换(数字(8,2),日期差(日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日,日

第二个问题:

ISNULL(将日期diff(DAY,#DiseaseIndex.AdmitDtSrt,#DiseaseIndex.dschrgdtm)转换为数字(8,2)),0)转换为“总平均服务水平”

第一版: (这对于问题的第一个版本是正确的。)

这是因为在
转换中使用
数值(8,2)
,而在
转换中使用
十进制(8,2)

尽管numeric和decimal是可互换的同义词,但GROUPBY子句中有一个numeric,select子句中有一个decimal将导致该错误

下面是一个简单的演示:

DECLARE @T AS TABLE
(
    col1 int,
    col2 int
)

INSERT INTO @T VALUES
(1,1),(2,1),(3,1),
(4,2),(5,2),(6,2),
(7,3)

SELECT  CAST(Col2 as NUMERIC(8,2)), 
        AVG(Col1)
FROM @T
GROUP BY CONVERT(DECIMAL(8,2), Col2)
结果:

1.00    2
2.00    5
3.00    7
列'@T.col2'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

但是,如果将select更改为十进制,或将group by更改为数字,则错误消息将消失,select将返回结果集:

SELECT  CAST(Col2 as DECIMAL(8,2)), 
        AVG(Col1)
FROM @T
GROUP BY CONVERT(DECIMAL(8,2), Col2)
结果:

1.00    2
2.00    5
3.00    7

您可以发送完整的查询吗?提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。请注意,
tsql
缩小了选择范围,但没有指定数据库。我已经编辑了我的答案。下次当有人要求你编辑帖子时,请让他们知道你是这样做的,并向他们发表了评论。你能发送完整的查询吗?提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(如
sql-server-2014
)标记数据库问题是很有帮助的。语法和特征的差异通常会影响答案。请注意,
tsql
缩小了选择范围,但没有指定数据库。我已经编辑了我的答案。请,下次当有人要求你编辑一篇文章时,让他们知道你是这样做的,并给他们发了一条评论。我遵循这个逻辑,与类型转换保持一致是有道理的。但我不会在同一份报告中同时使用这两种方法。我必须将编码的版本分开:一个版本使用强制转换,另一个版本使用转换。好吧,除非您共享查询(或者更好,它的简化版本)和示例数据,否则我无法提供更多帮助…我遵循这一逻辑,与类型转换保持一致是有意义的。,但我在同一份报告中没有同时使用这两种方法。我必须将编码的版本分开:一个版本使用CAST,另一个版本使用CONVERT。好吧,除非您共享查询(或者更好,它的简化版本)和示例数据,否则我无法提供更多帮助。。。